18 #ifndef UA_DYNAMIC_LINKING_EXPORT 19 # define UA_DYNAMIC_LINKING_EXPORT 110 #if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC)) 111 #define _Q_INVALIDATE(a) (a) = ((void *)-1) 113 #define _Q_INVALIDATE(a) 119 #define SLIST_HEAD(name, type) \ 121 struct type *slh_first; \ 124 #define SLIST_HEAD_INITIALIZER(head) \ 132 #define SLIST_ENTRY(type) \ 134 struct type *sle_next; \ 140 #define SLIST_FIRST(head) ((head)->slh_first) 141 #define SLIST_END(head) NULL 142 #define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) 143 #define SLIST_NEXT(elm, field) ((elm)->field.sle_next) 145 #define SLIST_FOREACH(var, head, field) \ 146 for((var) = SLIST_FIRST(head); \ 147 (var) != SLIST_END(head); \ 148 (var) = SLIST_NEXT(var, field)) 150 #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ 151 for ((var) = SLIST_FIRST(head); \ 152 (var) && ((tvar) = SLIST_NEXT(var, field), 1); \ 158 #define SLIST_INIT(head) { \ 159 SLIST_FIRST(head) = SLIST_END(head); \ 162 #define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ 163 (elm)->field.sle_next = (slistelm)->field.sle_next; \ 164 (slistelm)->field.sle_next = (elm); \ 167 #define SLIST_INSERT_HEAD(head, elm, field) do { \ 168 (elm)->field.sle_next = (head)->slh_first; \ 169 (head)->slh_first = (elm); \ 172 #define SLIST_REMOVE_AFTER(elm, field) do { \ 173 (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ 176 #define SLIST_REMOVE_HEAD(head, field) do { \ 177 (head)->slh_first = (head)->slh_first->field.sle_next; \ 180 #define SLIST_REMOVE(head, elm, type, field) do { \ 181 if ((head)->slh_first == (elm)) { \ 182 SLIST_REMOVE_HEAD((head), field); \ 184 struct type *curelm = (head)->slh_first; \ 186 while (curelm->field.sle_next != (elm)) \ 187 curelm = curelm->field.sle_next; \ 188 curelm->field.sle_next = \ 189 curelm->field.sle_next->field.sle_next; \ 190 _Q_INVALIDATE((elm)->field.sle_next); \ 197 #define LIST_HEAD(name, type) \ 199 struct type *lh_first; \ 202 #define LIST_HEAD_INITIALIZER(head) \ 205 #define LIST_ENTRY(type) \ 207 struct type *le_next; \ 208 struct type **le_prev; \ 214 #define LIST_FIRST(head) ((head)->lh_first) 215 #define LIST_END(head) NULL 216 #define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) 217 #define LIST_NEXT(elm, field) ((elm)->field.le_next) 219 #define LIST_FOREACH(var, head, field) \ 220 for((var) = LIST_FIRST(head); \ 221 (var)!= LIST_END(head); \ 222 (var) = LIST_NEXT(var, field)) 224 #define LIST_FOREACH_SAFE(var, head, field, tvar) \ 225 for ((var) = LIST_FIRST(head); \ 226 (var) && ((tvar) = LIST_NEXT(var, field), 1); \ 232 #define LIST_INIT(head) do { \ 233 LIST_FIRST(head) = LIST_END(head); \ 236 #define LIST_INSERT_AFTER(listelm, elm, field) do { \ 237 if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ 238 (listelm)->field.le_next->field.le_prev = \ 239 &(elm)->field.le_next; \ 240 (listelm)->field.le_next = (elm); \ 241 (elm)->field.le_prev = &(listelm)->field.le_next; \ 244 #define LIST_INSERT_BEFORE(listelm, elm, field) do { \ 245 (elm)->field.le_prev = (listelm)->field.le_prev; \ 246 (elm)->field.le_next = (listelm); \ 247 *(listelm)->field.le_prev = (elm); \ 248 (listelm)->field.le_prev = &(elm)->field.le_next; \ 251 #define LIST_INSERT_HEAD(head, elm, field) do { \ 252 if (((elm)->field.le_next = (head)->lh_first) != NULL) \ 253 (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ 254 (head)->lh_first = (elm); \ 255 (elm)->field.le_prev = &(head)->lh_first; \ 258 #define LIST_REMOVE(elm, field) do { \ 259 if ((elm)->field.le_next != NULL) \ 260 (elm)->field.le_next->field.le_prev = \ 261 (elm)->field.le_prev; \ 262 *(elm)->field.le_prev = (elm)->field.le_next; \ 263 _Q_INVALIDATE((elm)->field.le_prev); \ 264 _Q_INVALIDATE((elm)->field.le_next); \ 267 #define LIST_REPLACE(elm, elm2, field) do { \ 268 if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \ 269 (elm2)->field.le_next->field.le_prev = \ 270 &(elm2)->field.le_next; \ 271 (elm2)->field.le_prev = (elm)->field.le_prev; \ 272 *(elm2)->field.le_prev = (elm2); \ 273 _Q_INVALIDATE((elm)->field.le_prev); \ 274 _Q_INVALIDATE((elm)->field.le_next); \ 280 #define SIMPLEQ_HEAD(name, type) \ 282 struct type *sqh_first; \ 283 struct type **sqh_last; \ 286 #define SIMPLEQ_HEAD_INITIALIZER(head) \ 287 { NULL, &(head).sqh_first } 289 #define SIMPLEQ_ENTRY(type) \ 291 struct type *sqe_next; \ 297 #define SIMPLEQ_FIRST(head) ((head)->sqh_first) 298 #define SIMPLEQ_END(head) NULL 299 #define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) 300 #define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) 302 #define SIMPLEQ_FOREACH(var, head, field) \ 303 for((var) = SIMPLEQ_FIRST(head); \ 304 (var) != SIMPLEQ_END(head); \ 305 (var) = SIMPLEQ_NEXT(var, field)) 307 #define SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 308 for ((var) = SIMPLEQ_FIRST(head); \ 309 (var) && ((tvar) = SIMPLEQ_NEXT(var, field), 1); \ 315 #define SIMPLEQ_INIT(head) do { \ 316 (head)->sqh_first = NULL; \ 317 (head)->sqh_last = &(head)->sqh_first; \ 320 #define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 321 if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ 322 (head)->sqh_last = &(elm)->field.sqe_next; \ 323 (head)->sqh_first = (elm); \ 326 #define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 327 (elm)->field.sqe_next = NULL; \ 328 *(head)->sqh_last = (elm); \ 329 (head)->sqh_last = &(elm)->field.sqe_next; \ 332 #define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 333 if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ 334 (head)->sqh_last = &(elm)->field.sqe_next; \ 335 (listelm)->field.sqe_next = (elm); \ 338 #define SIMPLEQ_REMOVE_HEAD(head, field) do { \ 339 if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ 340 (head)->sqh_last = &(head)->sqh_first; \ 343 #define SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 344 if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \ 346 (head)->sqh_last = &(elm)->field.sqe_next; \ 352 #define XSIMPLEQ_HEAD(name, type) \ 354 struct type *sqx_first; \ 355 struct type **sqx_last; \ 356 unsigned long sqx_cookie; \ 359 #define XSIMPLEQ_ENTRY(type) \ 361 struct type *sqx_next; \ 367 #define XSIMPLEQ_XOR(head, ptr) ((__typeof(ptr))((head)->sqx_cookie ^ \ 368 (unsigned long)(ptr))) 369 #define XSIMPLEQ_FIRST(head) XSIMPLEQ_XOR(head, ((head)->sqx_first)) 370 #define XSIMPLEQ_END(head) NULL 371 #define XSIMPLEQ_EMPTY(head) (XSIMPLEQ_FIRST(head) == XSIMPLEQ_END(head)) 372 #define XSIMPLEQ_NEXT(head, elm, field) XSIMPLEQ_XOR(head, ((elm)->field.sqx_next)) 375 #define XSIMPLEQ_FOREACH(var, head, field) \ 376 for ((var) = XSIMPLEQ_FIRST(head); \ 377 (var) != XSIMPLEQ_END(head); \ 378 (var) = XSIMPLEQ_NEXT(head, var, field)) 380 #define XSIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \ 381 for ((var) = XSIMPLEQ_FIRST(head); \ 382 (var) && ((tvar) = XSIMPLEQ_NEXT(head, var, field), 1); \ 388 #define XSIMPLEQ_INIT(head) do { \ 389 arc4random_buf(&(head)->sqx_cookie, sizeof((head)->sqx_cookie)); \ 390 (head)->sqx_first = XSIMPLEQ_XOR(head, NULL); \ 391 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 394 #define XSIMPLEQ_INSERT_HEAD(head, elm, field) do { \ 395 if (((elm)->field.sqx_next = (head)->sqx_first) == \ 396 XSIMPLEQ_XOR(head, NULL)) \ 397 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 398 (head)->sqx_first = XSIMPLEQ_XOR(head, (elm)); \ 401 #define XSIMPLEQ_INSERT_TAIL(head, elm, field) do { \ 402 (elm)->field.sqx_next = XSIMPLEQ_XOR(head, NULL); \ 403 *(XSIMPLEQ_XOR(head, (head)->sqx_last)) = XSIMPLEQ_XOR(head, (elm)); \ 404 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 407 #define XSIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 408 if (((elm)->field.sqx_next = (listelm)->field.sqx_next) == \ 409 XSIMPLEQ_XOR(head, NULL)) \ 410 (head)->sqx_last = XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 411 (listelm)->field.sqx_next = XSIMPLEQ_XOR(head, (elm)); \ 414 #define XSIMPLEQ_REMOVE_HEAD(head, field) do { \ 415 if (((head)->sqx_first = XSIMPLEQ_XOR(head, \ 416 (head)->sqx_first)->field.sqx_next) == XSIMPLEQ_XOR(head, NULL)) \ 417 (head)->sqx_last = XSIMPLEQ_XOR(head, &(head)->sqx_first); \ 420 #define XSIMPLEQ_REMOVE_AFTER(head, elm, field) do { \ 421 if (((elm)->field.sqx_next = XSIMPLEQ_XOR(head, \ 422 (elm)->field.sqx_next)->field.sqx_next) \ 423 == XSIMPLEQ_XOR(head, NULL)) \ 425 XSIMPLEQ_XOR(head, &(elm)->field.sqx_next); \ 432 #define TAILQ_HEAD(name, type) \ 434 struct type *tqh_first; \ 435 struct type **tqh_last; \ 438 #define TAILQ_HEAD_INITIALIZER(head) \ 439 { NULL, &(head).tqh_first } 441 #define TAILQ_ENTRY(type) \ 443 struct type *tqe_next; \ 444 struct type **tqe_prev; \ 450 #define TAILQ_FIRST(head) ((head)->tqh_first) 451 #define TAILQ_END(head) NULL 452 #define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) 453 #define TAILQ_LAST(head, headname) \ 454 (*(((struct headname *)((head)->tqh_last))->tqh_last)) 456 #define TAILQ_PREV(elm, headname, field) \ 457 (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) 458 #define TAILQ_EMPTY(head) \ 459 (TAILQ_FIRST(head) == TAILQ_END(head)) 461 #define TAILQ_FOREACH(var, head, field) \ 462 for((var) = TAILQ_FIRST(head); \ 463 (var) != TAILQ_END(head); \ 464 (var) = TAILQ_NEXT(var, field)) 466 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ 467 for ((var) = TAILQ_FIRST(head); \ 468 (var) != TAILQ_END(head) && \ 469 ((tvar) = TAILQ_NEXT(var, field), 1); \ 473 #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ 474 for((var) = TAILQ_LAST(head, headname); \ 475 (var) != TAILQ_END(head); \ 476 (var) = TAILQ_PREV(var, headname, field)) 478 #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 479 for ((var) = TAILQ_LAST(head, headname); \ 480 (var) != TAILQ_END(head) && \ 481 ((tvar) = TAILQ_PREV(var, headname, field), 1); \ 487 #define TAILQ_INIT(head) do { \ 488 (head)->tqh_first = NULL; \ 489 (head)->tqh_last = &(head)->tqh_first; \ 492 #define TAILQ_INSERT_HEAD(head, elm, field) do { \ 493 if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ 494 (head)->tqh_first->field.tqe_prev = \ 495 &(elm)->field.tqe_next; \ 497 (head)->tqh_last = &(elm)->field.tqe_next; \ 498 (head)->tqh_first = (elm); \ 499 (elm)->field.tqe_prev = &(head)->tqh_first; \ 502 #define TAILQ_INSERT_TAIL(head, elm, field) do { \ 503 (elm)->field.tqe_next = NULL; \ 504 (elm)->field.tqe_prev = (head)->tqh_last; \ 505 *(head)->tqh_last = (elm); \ 506 (head)->tqh_last = &(elm)->field.tqe_next; \ 509 #define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ 510 if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ 511 (elm)->field.tqe_next->field.tqe_prev = \ 512 &(elm)->field.tqe_next; \ 514 (head)->tqh_last = &(elm)->field.tqe_next; \ 515 (listelm)->field.tqe_next = (elm); \ 516 (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ 519 #define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ 520 (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ 521 (elm)->field.tqe_next = (listelm); \ 522 *(listelm)->field.tqe_prev = (elm); \ 523 (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ 526 #define TAILQ_REMOVE(head, elm, field) do { \ 527 if (((elm)->field.tqe_next) != NULL) \ 528 (elm)->field.tqe_next->field.tqe_prev = \ 529 (elm)->field.tqe_prev; \ 531 (head)->tqh_last = (elm)->field.tqe_prev; \ 532 *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ 533 _Q_INVALIDATE((elm)->field.tqe_prev); \ 534 _Q_INVALIDATE((elm)->field.tqe_next); \ 537 #define TAILQ_REPLACE(head, elm, elm2, field) do { \ 538 if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ 539 (elm2)->field.tqe_next->field.tqe_prev = \ 540 &(elm2)->field.tqe_next; \ 542 (head)->tqh_last = &(elm2)->field.tqe_next; \ 543 (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ 544 *(elm2)->field.tqe_prev = (elm2); \ 545 _Q_INVALIDATE((elm)->field.tqe_prev); \ 546 _Q_INVALIDATE((elm)->field.tqe_next); \ 552 #define CIRCLEQ_HEAD(name, type) \ 554 struct type *cqh_first; \ 555 struct type *cqh_last; \ 558 #define CIRCLEQ_HEAD_INITIALIZER(head) \ 559 { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } 561 #define CIRCLEQ_ENTRY(type) \ 563 struct type *cqe_next; \ 564 struct type *cqe_prev; \ 570 #define CIRCLEQ_FIRST(head) ((head)->cqh_first) 571 #define CIRCLEQ_LAST(head) ((head)->cqh_last) 572 #define CIRCLEQ_END(head) ((void *)(head)) 573 #define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) 574 #define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) 575 #define CIRCLEQ_EMPTY(head) \ 576 (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) 578 #define CIRCLEQ_FOREACH(var, head, field) \ 579 for((var) = CIRCLEQ_FIRST(head); \ 580 (var) != CIRCLEQ_END(head); \ 581 (var) = CIRCLEQ_NEXT(var, field)) 583 #define CIRCLEQ_FOREACH_SAFE(var, head, field, tvar) \ 584 for ((var) = CIRCLEQ_FIRST(head); \ 585 (var) != CIRCLEQ_END(head) && \ 586 ((tvar) = CIRCLEQ_NEXT(var, field), 1); \ 589 #define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ 590 for((var) = CIRCLEQ_LAST(head); \ 591 (var) != CIRCLEQ_END(head); \ 592 (var) = CIRCLEQ_PREV(var, field)) 594 #define CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ 595 for ((var) = CIRCLEQ_LAST(head, headname); \ 596 (var) != CIRCLEQ_END(head) && \ 597 ((tvar) = CIRCLEQ_PREV(var, headname, field), 1); \ 603 #define CIRCLEQ_INIT(head) do { \ 604 (head)->cqh_first = CIRCLEQ_END(head); \ 605 (head)->cqh_last = CIRCLEQ_END(head); \ 608 #define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ 609 (elm)->field.cqe_next = (listelm)->field.cqe_next; \ 610 (elm)->field.cqe_prev = (listelm); \ 611 if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \ 612 (head)->cqh_last = (elm); \ 614 (listelm)->field.cqe_next->field.cqe_prev = (elm); \ 615 (listelm)->field.cqe_next = (elm); \ 618 #define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ 619 (elm)->field.cqe_next = (listelm); \ 620 (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ 621 if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \ 622 (head)->cqh_first = (elm); \ 624 (listelm)->field.cqe_prev->field.cqe_next = (elm); \ 625 (listelm)->field.cqe_prev = (elm); \ 628 #define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ 629 (elm)->field.cqe_next = (head)->cqh_first; \ 630 (elm)->field.cqe_prev = CIRCLEQ_END(head); \ 631 if ((head)->cqh_last == CIRCLEQ_END(head)) \ 632 (head)->cqh_last = (elm); \ 634 (head)->cqh_first->field.cqe_prev = (elm); \ 635 (head)->cqh_first = (elm); \ 638 #define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ 639 (elm)->field.cqe_next = CIRCLEQ_END(head); \ 640 (elm)->field.cqe_prev = (head)->cqh_last; \ 641 if ((head)->cqh_first == CIRCLEQ_END(head)) \ 642 (head)->cqh_first = (elm); \ 644 (head)->cqh_last->field.cqe_next = (elm); \ 645 (head)->cqh_last = (elm); \ 648 #define CIRCLEQ_REMOVE(head, elm, field) do { \ 649 if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ 650 (head)->cqh_last = (elm)->field.cqe_prev; \ 652 (elm)->field.cqe_next->field.cqe_prev = \ 653 (elm)->field.cqe_prev; \ 654 if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ 655 (head)->cqh_first = (elm)->field.cqe_next; \ 657 (elm)->field.cqe_prev->field.cqe_next = \ 658 (elm)->field.cqe_next; \ 659 _Q_INVALIDATE((elm)->field.cqe_prev); \ 660 _Q_INVALIDATE((elm)->field.cqe_next); \ 663 #define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ 664 if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ 666 (head)->cqh_last = (elm2); \ 668 (elm2)->field.cqe_next->field.cqe_prev = (elm2); \ 669 if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \ 671 (head)->cqh_first = (elm2); \ 673 (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ 674 _Q_INVALIDATE((elm)->field.cqe_prev); \ 675 _Q_INVALIDATE((elm)->field.cqe_next); \ 716 #define PCG32_INITIALIZER { 0x853c49e6748fea9bULL, 0xda3e39cb94b95bdbULL } 744 #define UA_assert(ignore) assert(ignore) 749 #define container_of(ptr, type, member) \ 750 (type *)((uintptr_t)ptr - offsetof(type,member)) 758 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L 759 # define UA_THREAD_LOCAL _Thread_local 760 #elif defined(__GNUC__) 761 # define UA_THREAD_LOCAL __thread 762 #elif defined(_MSC_VER) 763 # define UA_THREAD_LOCAL __declspec(thread) 765 # warning The compiler does not support thread-local variables 766 # define UA_THREAD_LOCAL 788 #ifndef UA_ENABLE_MULTITHREADING 789 # define UA_atomic_sync() 792 # define UA_atomic_sync() _ReadWriteBarrier() 794 # define UA_atomic_sync() __sync_synchronize() 799 UA_atomic_xchg(
void *
volatile * addr,
void *newptr) {
800 #ifndef UA_ENABLE_MULTITHREADING 806 return _InterlockedExchangePointer(addr, newptr);
808 return __sync_lock_test_and_set(addr, newptr);
814 UA_atomic_cmpxchg(
void *
volatile * addr,
void *expected,
void *newptr) {
815 #ifndef UA_ENABLE_MULTITHREADING 817 if(old == expected) {
823 return _InterlockedCompareExchangePointer(addr, expected, newptr);
825 return __sync_val_compare_and_swap(addr, expected, newptr);
831 UA_atomic_add(
volatile uint32_t *addr, uint32_t increase) {
832 #ifndef UA_ENABLE_MULTITHREADING 837 return _InterlockedExchangeAdd(addr, increase) + increase;
839 return __sync_add_and_fetch(addr, increase);
2518 #define UA_TRANSPORT_COUNT 12 2530 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY 0 2542 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER 1 2557 #define UA_TRANSPORT_TCPHELLOMESSAGE 2 2568 #define UA_TRANSPORT_TCPERRORMESSAGE 3 2585 #define UA_TRANSPORT_MESSAGETYPE 4 2597 #define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER 5 2611 #define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE 6 2622 #define UA_TRANSPORT_SEQUENCEHEADER 7 2633 #define UA_TRANSPORT_TCPMESSAGEHEADER 8 2647 #define UA_TRANSPORT_CHUNKTYPE 9 2657 #define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER 10 2668 #define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER 11 2686 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2687 # pragma GCC diagnostic push 2688 # pragma GCC diagnostic ignored "-Wmissing-field-initializers" 2689 # pragma GCC diagnostic ignored "-Wmissing-braces" 2700 UA_SecureConversationMessageAbortBody_new(
void) {
2726 UA_SecureConversationMessageFooter_new(
void) {
2752 UA_TcpHelloMessage_new(
void) {
2778 UA_TcpErrorMessage_new(
void) {
2804 UA_MessageType_new(
void) {
2829 UA_AsymmetricAlgorithmSecurityHeader_new(
void) {
2855 UA_TcpAcknowledgeMessage_new(
void) {
2880 UA_SequenceHeader_new(
void) {
2905 UA_TcpMessageHeader_new(
void) {
2930 UA_ChunkType_new(
void) {
2955 UA_SymmetricAlgorithmSecurityHeader_new(
void) {
2980 UA_SecureConversationMessageHeader_new(
void) {
2998 #if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6 2999 # pragma GCC diagnostic pop 3195 const char ** port,
const char ** path);
3257 const void *content,
const UA_DataType *contentType);
3276 #define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3277 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3278 ((CHANNEL)->connection ? CHANNEL->connection->sockfd : 0), \ 3279 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3281 #define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3282 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3283 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3284 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3286 #define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3287 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3288 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3289 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3291 #define UA_LOG_WARNING_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3292 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3293 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3294 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3296 #define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3297 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3298 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3299 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3301 #define UA_LOG_FATAL_CHANNEL(LOGGER, CHANNEL, MSG, ...) \ 3302 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SECURECHANNEL, "Connection %i | SecureChannel %i | " MSG, \ 3303 ((CHANNEL)->connection ? (CHANNEL)->connection->sockfd : 0), \ 3304 (CHANNEL)->securityToken.channelId, ##__VA_ARGS__); 3356 #define UA_NODE_BASEATTRIBUTES \ 3358 UA_NodeClass nodeClass; \ 3359 UA_QualifiedName browseName; \ 3360 UA_LocalizedText displayName; \ 3361 UA_LocalizedText description; \ 3362 UA_UInt32 writeMask; \ 3363 UA_UInt32 userWriteMask; \ 3364 size_t referencesSize; \ 3365 UA_ReferenceNode *references; 3443 #define UA_NODE_VARIABLEATTRIBUTES \ 3445 UA_NodeId dataType; \ 3446 UA_Int32 valueRank; \ 3447 size_t arrayDimensionsSize; \ 3448 UA_UInt32 *arrayDimensions; \ 3451 UA_ValueSource valueSource; \ 3454 UA_DataValue value; \ 3455 UA_ValueCallback callback; \ 3457 UA_DataSource dataSource; \ 3704 #define UA_MAXCONTINUATIONPOINTS 5 3717 #ifdef UA_ENABLE_SUBSCRIPTIONS 3718 typedef struct UA_PublishResponseEntry {
3722 } UA_PublishResponseEntry;
3738 #ifdef UA_ENABLE_SUBSCRIPTIONS 3741 SIMPLEQ_HEAD(UA_ListOfQueuedPublishResponses, UA_PublishResponseEntry) responseQueue;
3755 #ifdef UA_ENABLE_SUBSCRIPTIONS 3766 UA_Session_getUniqueSubscriptionID(
UA_Session *session);
3773 #define UA_LOG_TRACE_SESSION(LOGGER, SESSION, MSG, ...) \ 3774 UA_LOG_TRACE(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3775 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3776 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3777 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3780 #define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG, ...) \ 3781 UA_LOG_DEBUG(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3782 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3783 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3784 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3787 #define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG, ...) \ 3788 UA_LOG_INFO(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3789 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3790 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3791 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3794 #define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG, ...) \ 3795 UA_LOG_WARNING(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3796 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3797 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3798 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3801 #define UA_LOG_ERROR_SESSION(LOGGER, SESSION, MSG, ...) \ 3802 UA_LOG_ERROR(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3803 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3804 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3805 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3808 #define UA_LOG_FATAL_SESSION(LOGGER, SESSION, MSG, ...) \ 3809 UA_LOG_FATAL(LOGGER, UA_LOGCATEGORY_SESSION, "Connection %i | SecureChannel %i | Session " UA_PRINTF_GUID_FORMAT " | " MSG, \ 3810 ((SESSION)->channel ? ((SESSION)->channel->connection ? (SESSION)->channel->connection->sockfd : 0) : 0), \ 3811 ((SESSION)->channel ? (SESSION)->channel->securityToken.channelId : 0), \ 3812 UA_PRINTF_GUID_DATA((SESSION)->sessionId.identifier.guid), \ 3907 UA_SubscriptionState
state;
3987 #define UA_NodeStore_newObjectNode() \ 3988 (UA_ObjectNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECT) 3989 #define UA_NodeStore_newVariableNode() \ 3990 (UA_VariableNode*)UA_NodeStore_newNode(UA_NODECLASS_VARIABLE) 3991 #define UA_NodeStore_newMethodNode() \ 3992 (UA_MethodNode*)UA_NodeStore_newNode(UA_NODECLASS_METHOD) 3993 #define UA_NodeStore_newObjectTypeNode() \ 3994 (UA_ObjectTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_OBJECTTYPE) 3995 #define UA_NodeStore_newVariableTypeNode() \ 3996 (UA_VariableTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_VARIABLETYPE) 3997 #define UA_NodeStore_newReferenceTypeNode() \ 3998 (UA_ReferenceTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_REFERENCETYPE) 3999 #define UA_NodeStore_newDataTypeNode() \ 4000 (UA_DataTypeNode*)UA_NodeStore_newNode(UA_NODECLASS_DATATYPE) 4001 #define UA_NodeStore_newViewNode() \ 4002 (UA_ViewNode*)UA_NodeStore_newNode(UA_NODECLASS_VIEW) 4146 #define ANONYMOUS_POLICY "open62541-anonymous-policy" 4147 #define USERNAME_POLICY "open62541-username-policy" 4154 #ifdef UA_ENABLE_MULTITHREADING 4155 # define _LGPL_SOURCE 4157 # include <urcu/lfstack.h> 4159 # define UA_RCU_LOCK() rcu_read_lock() 4160 # define UA_RCU_UNLOCK() rcu_read_unlock() 4161 # define UA_ASSERT_RCU_LOCKED() 4162 # define UA_ASSERT_RCU_UNLOCKED() 4165 # define UA_ASSERT_RCU_LOCKED() assert(rcu_locked) 4166 # define UA_ASSERT_RCU_UNLOCKED() assert(!rcu_locked) 4167 # define UA_RCU_LOCK() do { \ 4168 UA_ASSERT_RCU_UNLOCKED(); \ 4169 rcu_locked = true; \ 4170 rcu_read_lock(); } while(0) 4171 # define UA_RCU_UNLOCK() do { \ 4172 UA_ASSERT_RCU_LOCKED(); \ 4173 rcu_locked = false; \ 4174 rcu_read_unlock(); } while(0) 4177 # define UA_RCU_LOCK() 4178 # define UA_RCU_UNLOCK() 4179 # define UA_ASSERT_RCU_LOCKED() 4180 # define UA_ASSERT_RCU_UNLOCKED() 4184 #ifdef UA_ENABLE_MULTITHREADING 4190 char padding[64 -
sizeof(
void*) -
sizeof(pthread_t) -
4195 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 4220 #ifndef UA_ENABLE_MULTITHREADING 4224 struct cds_wfcq_head dispatchQueue_head;
4226 struct cds_lfs_stack mainLoopJobs;
4228 struct DelayedJobs *delayedJobs;
4229 pthread_cond_t dispatchQueue_condition;
4230 pthread_mutex_t dispatchQueue_mutex;
4231 struct cds_wfcq_tail dispatchQueue_tail;
4271 UA_InstantiationCallback *instantiationCallback,
4298 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize);
4304 size_t referenceTypeIdsSize);
4307 getNodeType(UA_Server *server,
const UA_Node *node);
4318 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
4328 const UA_UInt32 *constraintArrayDimensions,
4329 size_t testArrayDimensionsSize,
4395 const void *request,
void *response);
4449 UA_Session *session,
4550 void Service_Read(UA_Server *server, UA_Session *session,
4577 void Service_Call(UA_Server *server, UA_Session *session,
4677 #ifdef UA_ENABLE_SUBSCRIPTIONS 4679 typedef struct UA_Client_NotificationsAckNumber {
4680 LIST_ENTRY(UA_Client_NotificationsAckNumber) listEntry;
4682 } UA_Client_NotificationsAckNumber;
4684 typedef struct UA_Client_MonitoredItem {
4685 LIST_ENTRY(UA_Client_MonitoredItem) listEntry;
4695 void *handlerContext;
4696 } UA_Client_MonitoredItem;
4698 typedef struct UA_Client_Subscription {
4699 LIST_ENTRY(UA_Client_Subscription) listEntry;
4706 LIST_HEAD(UA_ListOfClientMonitoredItems, UA_Client_MonitoredItem) monitoredItems;
4707 } UA_Client_Subscription;
4709 void UA_Client_Subscriptions_forceDelete(
UA_Client *client, UA_Client_Subscription *sub);
4747 #ifdef UA_ENABLE_SUBSCRIPTIONS 4749 LIST_HEAD(ListOfUnacknowledgedNotifications, UA_Client_NotificationsAckNumber) pendingNotificationsAcks;
4750 LIST_HEAD(ListOfClientSubscriptionItems, UA_Client_Subscription) subscriptions;
4809 static void deleteMembers_noInit(
void *p,
const UA_DataType *type);
4815 size_t length = strlen(src);
4823 memcpy(str.
data, src, length);
4834 return (is == 0) ? true :
false;
4852 time_t secSinceUnixEpoch =
4855 memset(&ts, 0,
sizeof(
struct tm));
4863 return dateTimeStruct;
4868 for(
size_t i = digits; i > 0; --i) {
4869 pos[i-1] = (
UA_Byte)((n % 10) +
'0');
4884 printNumber(tSt.
day, &str.
data[3], 2);
4886 printNumber(tSt.
year, &str.
data[6], 4);
4888 printNumber(tSt.
hour, &str.
data[11], 2);
4890 printNumber(tSt.
min, &str.
data[14], 2);
4892 printNumber(tSt.
sec, &str.
data[17], 2);
4905 if(memcmp(g1, g2,
sizeof(
UA_Guid)) == 0)
4933 UA_ByteString_init(bs);
5031 #define FNV_PRIME_32 16777619 5034 for(
size_t i = 0; i < size; ++i) {
5035 fnv = fnv ^ (buf[i]);
5058 NodeId_deleteMembers(&p->
nodeId, _);
5136 if(UA_Variant_isScalar(src))
5209 size_t *total,
size_t *block,
size_t *stride,
size_t *first) {
5211 #if(MAX_SIZE > 0xffffffff) 5220 size_t dims_count = 1;
5222 size_t elements = 1;
5225 for(
size_t i = 0; i < dims_count; ++i)
5226 elements *= dims[i];
5242 for(
size_t i = 0; i < dims_count; ++i) {
5251 realmax[i] = dims[i] - 1;
5262 size_t running_dimssize = 1;
5264 for(
size_t k = dims_count; k > 0;) {
5267 if(!found_contiguous && dimrange != dims[k]) {
5269 found_contiguous =
true;
5270 *block = running_dimssize * dimrange;
5271 *stride = running_dimssize * dims[k];
5274 running_dimssize *= dims[k];
5300 length = dim->
max - dim->
min + 1;
5315 UA_Boolean isScalar = UA_Variant_isScalar(src);
5347 size_t count, block, stride, first;
5348 UA_StatusCode retval = computeStrides(src, thisrange, &count,
5349 &block, &stride, &first);
5354 UA_Variant_init(dst);
5360 size_t block_count = count / block;
5362 uintptr_t nextdst = (uintptr_t)dst->
data;
5363 uintptr_t nextsrc = (uintptr_t)src->
data + (elem_size * first);
5367 for(
size_t i = 0; i < block_count; ++i) {
5368 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5369 nextdst += block * elem_size;
5370 nextsrc += stride * elem_size;
5373 for(
size_t i = 0; i < block_count; ++i) {
5374 for(
size_t j = 0; j < block; ++j) {
5375 retval =
UA_copy((
const void*)nextsrc,
5376 (
void*)nextdst, src->
type);
5377 nextdst += elem_size;
5378 nextsrc += elem_size;
5380 nextsrc += (stride - block) * elem_size;
5394 for(
size_t i = 0; i < block_count; ++i) {
5397 retval = copySubString((
const UA_String*)nextsrc,
5404 nextdst += elem_size;
5405 nextsrc += elem_size;
5407 nextsrc += (stride - block) * elem_size;
5429 Variant_deletemembers(dst,
NULL);
5443 Variant_setRange(
UA_Variant *v,
void *array,
size_t arraySize,
5446 size_t count, block, stride, first;
5448 &block, &stride, &first);
5451 if(count != arraySize)
5455 size_t block_count = count / block;
5457 uintptr_t nextdst = (uintptr_t)v->
data + (first * elem_size);
5458 uintptr_t nextsrc = (uintptr_t)array;
5460 for(
size_t i = 0; i < block_count; ++i) {
5461 memcpy((
void*)nextdst, (
void*)nextsrc, elem_size * block);
5462 nextsrc += block * elem_size;
5463 nextdst += stride * elem_size;
5466 for(
size_t i = 0; i < block_count; ++i) {
5467 for(
size_t j = 0; j < block; ++j) {
5468 deleteMembers_noInit((
void*)nextdst, v->
type);
5469 retval |=
UA_copy((
void*)nextsrc, (
void*)nextdst, v->
type);
5470 nextdst += elem_size;
5471 nextsrc += elem_size;
5473 nextdst += (stride - block) * elem_size;
5479 memset(array, 0,
sizeof(elem_size)*arraySize);
5487 return Variant_setRange(v, array, arraySize, range,
false);
5493 return Variant_setRange(v, (
void*)(uintptr_t)array,
5494 arraySize, range,
true);
5501 String_deleteMembers(&p->
text,
NULL);
5508 retval |= UA_String_copy(&src->
text, &dst->
text);
5522 UA_Variant_init(&dst->
value);
5525 DataValue_deleteMembers(dst,
NULL);
5635 copy_noInit(
const void *src,
void *dst,
const UA_DataType *type) {
5637 uintptr_t ptrs = (uintptr_t)src;
5638 uintptr_t ptrd = (uintptr_t)dst;
5640 for(
size_t i = 0; i < membersSize; ++i) {
5648 retval |= copyJumpTable[fi]((
const void*)ptrs, (
void*)ptrd, mt);
5654 size_t *dst_size = (
size_t*)ptrd;
5655 const size_t size = *((
const size_t*)ptrs);
5656 ptrs +=
sizeof(size_t);
5657 ptrd +=
sizeof(size_t);
5658 retval |=
UA_Array_copy(*(
void*
const*)ptrs, size, (
void**)ptrd, mt);
5663 ptrs +=
sizeof(
void*);
5664 ptrd +=
sizeof(
void*);
5672 memset(dst, 0, type->
memSize);
5679 static void nopDeleteMembers(
void *p,
const UA_DataType *type) { }
5714 deleteMembers_noInit(
void *p,
const UA_DataType *type) {
5715 uintptr_t ptr = (uintptr_t)p;
5717 for(
size_t i = 0; i < membersSize; ++i) {
5724 deleteMembersJumpTable[fi]((
void*)ptr, mt);
5728 size_t length = *(
size_t*)ptr;
5729 ptr +=
sizeof(size_t);
5731 ptr +=
sizeof(
void*);
5738 deleteMembers_noInit(p, type);
5744 deleteMembers_noInit(p, type);
5779 memcpy(*dst, src, type->
memSize * size);
5783 uintptr_t ptrs = (uintptr_t)src;
5784 uintptr_t ptrd = (uintptr_t)*dst;
5786 for(
size_t i = 0; i < size; ++i) {
5787 retval |=
UA_copy((
void*)ptrs, (
void*)ptrd, type);
5801 uintptr_t ptr = (uintptr_t)p;
5802 for(
size_t i = 0; i < size; ++i) {
5832 #if defined(__clang__) 5833 # pragma GCC diagnostic push 5834 # pragma GCC diagnostic warning "-W#warnings" 5837 #ifndef UA_BINARY_OVERLAYABLE_INTEGER 5838 # warning Integer endianness could not be detected to be little endian. Use slow generic encoding. 5843 #ifndef UA_BINARY_OVERLAYABLE_FLOAT 5844 # warning Float endianness could not be detected to be little endian in the IEEE 754 format. Use slow generic encoding. 5847 #if defined(__clang__) 5848 # pragma GCC diagnostic pop 5896 exchangeBuffer(
void) {
5897 if(!g_exchangeBufferCallback)
5902 void *store_exchangeBufferCallbackHandle = g_exchangeBufferCallbackHandle;
5904 size_t offset = (uintptr_t)(g_pos - g_buf.data);
5906 status ret = g_exchangeBufferCallback(g_exchangeBufferCallbackHandle, &buf, offset);
5909 g_exchangeBufferCallback = store_exchangeBufferCallback;
5910 g_exchangeBufferCallbackHandle = store_exchangeBufferCallbackHandle;
5921 #if !UA_BINARY_OVERLAYABLE_INTEGER 5925 UA_encode16(
const u16 v,
u8 buf[2]) {
5927 buf[1] = (
u8)(v >> 8);
5931 UA_decode16(
const u8 buf[2],
u16 *v) {
5932 *v = (
u16)((
u16)buf[0] + (((
u16)buf[1]) << 8));
5936 UA_encode32(
const u32 v,
u8 buf[4]) {
5938 buf[1] = (
u8)(v >> 8);
5939 buf[2] = (
u8)(v >> 16);
5940 buf[3] = (
u8)(v >> 24);
5944 UA_decode32(
const u8 buf[4],
u32 *v) {
5946 (((
u32)buf[1]) << 8) +
5947 (((
u32)buf[2]) << 16) +
5948 (((
u32)buf[3]) << 24));
5952 UA_encode64(
const u64 v,
u8 buf[8]) {
5954 buf[1] = (
u8)(v >> 8);
5955 buf[2] = (
u8)(v >> 16);
5956 buf[3] = (
u8)(v >> 24);
5957 buf[4] = (
u8)(v >> 32);
5958 buf[5] = (
u8)(v >> 40);
5959 buf[6] = (
u8)(v >> 48);
5960 buf[7] = (
u8)(v >> 56);
5964 UA_decode64(
const u8 buf[8],
u64 *v) {
5966 (((
u64)buf[1]) << 8) +
5967 (((
u64)buf[2]) << 16) +
5968 (((
u64)buf[3]) << 24) +
5969 (((
u64)buf[4]) << 32) +
5970 (((
u64)buf[5]) << 40) +
5971 (((
u64)buf[6]) << 48) +
5972 (((
u64)buf[7]) << 56));
5979 Boolean_encodeBinary(
const bool *src,
const UA_DataType *_) {
5980 if(g_pos +
sizeof(
bool) > g_end)
5982 *g_pos = *(
const u8*)src;
5988 Boolean_decodeBinary(
bool *dst,
const UA_DataType *_) {
5989 if(g_pos +
sizeof(
bool) > g_end)
5991 *dst = (*g_pos > 0) ?
true :
false;
5999 if(g_pos +
sizeof(
u8) > g_end)
6001 *g_pos = *(
const u8*)src;
6008 if(g_pos +
sizeof(
u8) > g_end)
6018 if(g_pos +
sizeof(
u16) > g_end)
6020 #if UA_BINARY_OVERLAYABLE_INTEGER 6021 memcpy(g_pos, src,
sizeof(
u16));
6023 UA_encode16(*src, g_pos);
6031 if(g_pos +
sizeof(
u16) > g_end)
6033 #if UA_BINARY_OVERLAYABLE_INTEGER 6034 memcpy(dst, g_pos,
sizeof(
u16));
6036 UA_decode16(g_pos, dst);
6045 if(g_pos +
sizeof(
u32) > g_end)
6047 #if UA_BINARY_OVERLAYABLE_INTEGER 6048 memcpy(g_pos, src,
sizeof(
u32));
6050 UA_encode32(*src, g_pos);
6057 Int32_encodeBinary(
i32 const *src) {
6058 return UInt32_encodeBinary((
const u32*)src,
NULL);
6063 if(g_pos +
sizeof(
u32) > g_end)
6065 #if UA_BINARY_OVERLAYABLE_INTEGER 6066 memcpy(dst, g_pos,
sizeof(
u32));
6068 UA_decode32(g_pos, dst);
6075 Int32_decodeBinary(
i32 *dst) {
6076 return UInt32_decodeBinary((
u32*)dst,
NULL);
6080 StatusCode_decodeBinary(
status *dst) {
6081 return UInt32_decodeBinary((
u32*)dst,
NULL);
6087 if(g_pos +
sizeof(
u64) > g_end)
6089 #if UA_BINARY_OVERLAYABLE_INTEGER 6090 memcpy(g_pos, src,
sizeof(
u64));
6092 UA_encode64(*src, g_pos);
6100 if(g_pos +
sizeof(
u64) > g_end)
6102 #if UA_BINARY_OVERLAYABLE_INTEGER 6103 memcpy(dst, g_pos,
sizeof(
u64));
6105 UA_decode64(g_pos, dst);
6113 return UInt64_decodeBinary((
u64*)dst,
NULL);
6120 #if UA_BINARY_OVERLAYABLE_FLOAT 6121 # define Float_encodeBinary UInt32_encodeBinary 6122 # define Float_decodeBinary UInt32_decodeBinary 6123 # define Double_encodeBinary UInt64_encodeBinary 6124 # define Double_decodeBinary UInt64_decodeBinary 6133 pack754(
long double f,
unsigned bits,
unsigned expbits) {
6134 unsigned significandbits = bits - expbits - 1;
6137 if (f < 0) { sign = 1; fnorm = -f; }
6138 else { sign = 0; fnorm = f; }
6140 while(fnorm >= 2.0) { fnorm /= 2.0; ++shift; }
6141 while(fnorm < 1.0) { fnorm *= 2.0; --shift; }
6142 fnorm = fnorm - 1.0;
6143 long long significand = (
long long)(fnorm * ((
float)(1LL<<significandbits) + 0.5f));
6144 long long exponent = shift + ((1<<(expbits-1)) - 1);
6145 return (uint64_t)((sign<<(bits-1)) | (exponent<<(bits-expbits-1)) | significand);
6149 unpack754(uint64_t i,
unsigned bits,
unsigned expbits) {
6150 unsigned significandbits = bits - expbits - 1;
6151 long double result = (
long double)(i&(uint64_t)((1LL<<significandbits)-1));
6152 result /= (1LL<<significandbits);
6154 unsigned bias = (unsigned)(1<<(expbits-1)) - 1;
6155 long long shift = (
long long)((i>>significandbits) & (uint64_t)((1LL<<expbits)-1)) - bias;
6156 while(shift > 0) { result *= 2.0; --shift; }
6157 while(shift < 0) { result /= 2.0; ++shift; }
6158 result *= ((i>>(bits-1))&1)? -1.0: 1.0;
6163 #define FLOAT_NAN 0xffc00000 6164 #define FLOAT_INF 0x7f800000 6165 #define FLOAT_NEG_INF 0xff800000 6166 #define FLOAT_NEG_ZERO 0x80000000 6177 else encoded = (
u32)pack754(f, 32, 8);
6178 return UInt32_encodeBinary(&encoded,
NULL);
6184 status ret = UInt32_decodeBinary(&decoded,
NULL);
6187 if(decoded == 0) *dst = 0.0f;
6189 else if(decoded ==
FLOAT_INF) *dst = INFINITY;
6191 else if((decoded >= 0x7f800001 && decoded <= 0x7fffffff) ||
6192 (decoded >= 0xff800001 && decoded <= 0xffffffff)) *dst = NAN;
6193 else *dst = (
UA_Float)unpack754(decoded, 32, 8);
6198 #define DOUBLE_NAN 0xfff8000000000000L 6199 #define DOUBLE_INF 0x7ff0000000000000L 6200 #define DOUBLE_NEG_INF 0xfff0000000000000L 6201 #define DOUBLE_NEG_ZERO 0x8000000000000000L 6212 else encoded = pack754(d, 64, 11);
6213 return UInt64_encodeBinary(&encoded,
NULL);
6219 status ret = UInt64_decodeBinary(&decoded,
NULL);
6222 if(decoded == 0) *dst = 0.0;
6224 else if(decoded ==
DOUBLE_INF) *dst = INFINITY;
6227 else if((decoded >= 0x7ff0000000000001L && decoded <= 0x7fffffffffffffffL) ||
6228 (decoded >= 0xfff0000000000001L && decoded <= 0xffffffffffffffffL)) *dst = NAN;
6229 else *dst = (
UA_Double)unpack754(decoded, 64, 11);
6238 encodeNumericWithExchangeBuffer(
const void *ptr,
6242 ret = exchangeBuffer();
6245 encodeFunc(ptr,
NULL);
6253 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type);
6260 Array_encodeBinaryOverlayable(uintptr_t ptr,
size_t length,
size_t elementMemSize) {
6262 size_t finished = 0;
6265 while(g_end < g_pos + (elementMemSize * (length-finished))) {
6266 size_t possible = ((uintptr_t)g_end - (uintptr_t)g_pos) / (
sizeof(
u8) * elementMemSize);
6267 size_t possibleMem = possible * elementMemSize;
6268 memcpy(g_pos, (
void*)ptr, possibleMem);
6269 g_pos += possibleMem;
6271 finished += possible;
6272 status ret = exchangeBuffer();
6278 memcpy(g_pos, (
void*)ptr, elementMemSize * (length-finished));
6279 g_pos += elementMemSize * (length-finished);
6284 Array_encodeBinaryComplex(uintptr_t ptr,
size_t length,
const UA_DataType *type) {
6291 for(
size_t i = 0; i < length; ++i) {
6293 status ret = encodeType((
const void*)ptr, type);
6299 ret = exchangeBuffer();
6312 Array_encodeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
6314 i32 signed_length = -1;
6318 signed_length = (
i32)length;
6323 status ret = encodeNumericWithExchangeBuffer(&signed_length,
6332 return Array_encodeBinaryComplex((uintptr_t)src, length, type);
6333 return Array_encodeBinaryOverlayable((uintptr_t)src, length, type->
memSize);
6341 status ret = Int32_decodeBinary(&signed_length);
6346 if(signed_length <= 0) {
6348 if(signed_length < 0)
6358 size_t length = (size_t)signed_length;
6359 if(g_pos + ((type->
memSize * length) / 32) > g_end)
6369 if(g_end < g_pos + (type->
memSize * length)) {
6374 memcpy(*dst, g_pos, type->
memSize * length);
6375 g_pos += type->
memSize * length;
6378 uintptr_t ptr = (uintptr_t)*dst;
6380 for(
size_t i = 0; i < length; ++i) {
6381 ret = decodeBinaryJumpTable[decode_index]((
void*)ptr, type);
6391 *out_length = length;
6423 ret |= UInt16_encodeBinary(&src->
data2,
NULL);
6424 ret |= UInt16_encodeBinary(&src->
data3,
NULL);
6425 if(g_pos + (8*
sizeof(
u8)) > g_end)
6427 memcpy(g_pos, src->
data4, 8*
sizeof(
u8));
6435 ret |= UInt16_decodeBinary(&dst->
data2,
NULL);
6436 ret |= UInt16_decodeBinary(&dst->
data3,
NULL);
6437 if(g_pos + (8*
sizeof(
u8)) > g_end)
6439 memcpy(dst->
data4, g_pos, 8*
sizeof(
u8));
6445 #define UA_NODEIDTYPE_NUMERIC_TWOBYTE 0 6446 #define UA_NODEIDTYPE_NUMERIC_FOURBYTE 1 6447 #define UA_NODEIDTYPE_NUMERIC_COMPLETE 2 6449 #define UA_EXPANDEDNODEID_SERVERINDEX_FLAG 0x40 6450 #define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG 0x80 6456 NodeId_encodeBinaryWithEncodingMask(
UA_NodeId const *src,
u8 encoding) {
6462 ret |= Byte_encodeBinary(&encoding,
NULL);
6467 ret |= Byte_encodeBinary(&encoding,
NULL);
6469 ret |= Byte_encodeBinary(&nsindex,
NULL);
6471 ret |= UInt16_encodeBinary(&identifier16,
NULL);
6474 ret |= Byte_encodeBinary(&encoding,
NULL);
6476 ret |= Byte_encodeBinary(&identifier8,
NULL);
6481 ret |= Byte_encodeBinary(&encoding,
NULL);
6489 ret |= Byte_encodeBinary(&encoding,
NULL);
6495 ret |= Byte_encodeBinary(&encoding,
NULL);
6509 return NodeId_encodeBinaryWithEncodingMask(src, 0);
6514 u8 dstByte = 0, encodingByte = 0;
6518 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6527 switch (encodingByte) {
6530 ret = Byte_decodeBinary(&dstByte,
NULL);
6536 ret |= Byte_decodeBinary(&dstByte,
NULL);
6538 ret |= UInt16_decodeBinary(&dstUInt16,
NULL);
6579 status ret = NodeId_encodeBinaryWithEncodingMask(&src->
nodeId, encoding);
6594 ret = encodeNumericWithExchangeBuffer(&src->
serverIndex,
6605 u8 encoding = *g_pos;
6623 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE 0x01 6624 #define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT 0x02 6636 status ret = Byte_encodeBinary(&encoding,
NULL);
6642 ret |= String_encodeBinary(&src->
locale,
NULL);
6644 ret |= String_encodeBinary(&src->
text,
NULL);
6653 status ret = Byte_decodeBinary(&encoding,
NULL);
6657 ret |= String_decodeBinary(&dst->
locale,
NULL);
6659 ret |= String_decodeBinary(&dst->
text,
NULL);
6666 UA_findDataTypeByBinary(
const UA_NodeId *typeId) {
6691 ret = encodeNumericWithExchangeBuffer(&encoding,
6718 status ret = NodeId_encodeBinary(&typeId,
NULL);
6722 ret |= Byte_encodeBinary(&encoding,
NULL);
6731 i32 signed_len = (
i32)len;
6732 ret |= Int32_encodeBinary(&signed_len);
6745 const UA_DataType *type = UA_findDataTypeByBinary(typeId);
6766 return decodeBinaryJumpTable[decode_index](dst->
content.
decoded.data, type);
6777 UA_NodeId_init(&binTypeId);
6778 status ret = NodeId_decodeBinary(&binTypeId,
NULL);
6779 ret |= Byte_decodeBinary(&encoding,
NULL);
6781 UA_NodeId_deleteMembers(&binTypeId);
6786 ret = ExtensionObject_decodeBinaryContent(dst, &binTypeId);
6787 UA_NodeId_deleteMembers(&binTypeId);
6799 UA_NodeId_deleteMembers(&binTypeId);
6810 Variant_encodeBinaryWrapExtensionObject(
const UA_Variant *src,
const bool isArray) {
6821 ret = Int32_encodeBinary(&encodedLength);
6828 UA_ExtensionObject_init(&eo);
6832 uintptr_t ptr = (uintptr_t)src->
data;
6854 return Byte_encodeBinary(&encoding,
NULL);
6873 status ret = Byte_encodeBinary(&encoding,
NULL);
6879 ret = Variant_encodeBinaryWrapExtensionObject(src, isArray);
6881 ret = UA_encodeBinaryInternal(src->
data, src->
type);
6893 Variant_decodeBinaryUnwrapExtensionObject(
UA_Variant *dst) {
6896 u8 *old_pos = g_pos;
6900 UA_NodeId_init(&typeId);
6901 status ret = NodeId_decodeBinary(&typeId,
NULL);
6907 ret = Byte_decodeBinary(&encoding,
NULL);
6909 UA_NodeId_deleteMembers(&typeId);
6915 (dst->
type = UA_findDataTypeByBinary(&typeId)) !=
NULL) {
6922 UA_NodeId_deleteMembers(&typeId);
6932 return decodeBinaryJumpTable[decode_index](dst->
data, dst->
type);
6940 status ret = Byte_decodeBinary(&encodingByte,
NULL);
6945 if(encodingByte == 0)
6967 ret = decodeBinaryJumpTable[typeIndex](dst->
data, dst->
type);
6969 ret = Variant_decodeBinaryUnwrapExtensionObject(dst);
6983 u8 encodingMask = (
u8)
6992 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7000 ret = Variant_encodeBinary(&src->
value,
NULL);
7006 ret |= encodeNumericWithExchangeBuffer(&src->
status,
7024 #define MAX_PICO_SECONDS 9999 7030 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7035 if(encodingMask & 0x01) {
7037 ret |= Variant_decodeBinary(&dst->
value,
NULL);
7039 if(encodingMask & 0x02) {
7041 ret |= StatusCode_decodeBinary(&dst->
status);
7043 if(encodingMask & 0x04) {
7047 if(encodingMask & 0x10) {
7053 if(encodingMask & 0x08) {
7057 if(encodingMask & 0x20) {
7070 u8 encodingMask = (
u8)
7076 status ret = Byte_encodeBinary(&encodingMask,
NULL);
7084 ret |= Int32_encodeBinary(&src->
locale);
7120 status ret = Byte_decodeBinary(&encodingMask,
NULL);
7125 if(encodingMask & 0x01) {
7129 if(encodingMask & 0x02) {
7133 if(encodingMask & 0x04) {
7137 if(encodingMask & 0x08) {
7139 ret |= Int32_decodeBinary(&dst->
locale);
7141 if(encodingMask & 0x10) {
7145 if(encodingMask & 0x20) {
7149 if(encodingMask & 0x40) {
7166 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type);
7198 UA_encodeBinaryInternal(
const void *src,
const UA_DataType *type) {
7199 uintptr_t ptr = (uintptr_t)src;
7209 size_t memSize = membertype->
memSize;
7211 ret = encodeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7215 ret = exchangeBuffer();
7216 ptr -= member->
padding + memSize;
7225 const size_t length = *((
const size_t*)ptr);
7226 ptr +=
sizeof(size_t);
7227 ret = Array_encodeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7228 ptr +=
sizeof(
void*);
7241 g_pos = &dst->
data[*offset];
7243 g_exchangeBufferCallback = exchangeCallback;
7244 g_exchangeBufferCallbackHandle = exchangeHandle;
7245 status ret = UA_encodeBinaryInternal(src, type);
7250 *offset = (uintptr_t)(g_pos - g_buf.data);
7284 UA_decodeBinaryInternal(
void *dst,
const UA_DataType *type) {
7285 uintptr_t ptr = (uintptr_t)dst;
7295 size_t memSize = membertype->
memSize;
7296 ret |= decodeBinaryJumpTable[fi]((
void *
UA_RESTRICT)ptr, membertype);
7300 size_t *length = (
size_t*)ptr;
7301 ptr +=
sizeof(size_t);
7303 ptr +=
sizeof(
void*);
7313 memset(dst, 0, type->
memSize);
7317 g_pos = &src->
data[*offset];
7321 status ret = UA_decodeBinaryInternal(dst, type);
7325 *offset = (size_t)(g_pos - src->
data) /
sizeof(
u8);
7336 Array_calcSizeBinary(
const void *src,
size_t length,
const UA_DataType *type) {
7342 uintptr_t ptr = (uintptr_t)src;
7344 for(
size_t i = 0; i < length; ++i) {
7345 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, type);
7358 return 4 + p->length;
7369 switch (src->identifierType) {
7373 }
else if(src->identifier.numeric >
UA_BYTE_MAX || src->namespaceIndex > 0) {
7382 s += String_calcSizeBinary(&src->identifier.string,
NULL);
7395 size_t s = NodeId_calcSizeBinary(&src->
nodeId,
NULL);
7407 s += String_calcSizeBinary(&src->
locale,
NULL);
7409 s += String_calcSizeBinary(&src->
text,
NULL);
7425 s += calcSizeBinaryJumpTable[encode_index](src->
content.
decoded.data, type);
7453 UA_NodeId_init(&typeId);
7468 uintptr_t ptr = (uintptr_t)src->
data;
7470 for(
size_t i = 0; i < length; ++i) {
7473 s += NodeId_calcSizeBinary(&typeId,
NULL);
7476 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, src->
type);
7490 s += Variant_calcSizeBinary(&src->
value,
NULL);
7556 uintptr_t ptr = (uintptr_t)p;
7559 for(
size_t i = 0; i < membersSize; ++i) {
7565 s += calcSizeBinaryJumpTable[encode_index]((
const void*)ptr, membertype);
7569 const size_t length = *((
const size_t*)ptr);
7570 ptr +=
sizeof(size_t);
7571 s += Array_calcSizeBinary(*(
void *
UA_RESTRICT const *)ptr, length, membertype);
7572 ptr +=
sizeof(
void*);
7587 #ifdef UA_ENABLE_TYPENAMES 7590 .namespaceZero =
true,
7598 #ifdef UA_ENABLE_TYPENAMES 7601 .namespaceZero =
true,
7609 #ifdef UA_ENABLE_TYPENAMES 7612 .namespaceZero =
true,
7620 #ifdef UA_ENABLE_TYPENAMES 7623 .namespaceZero =
true,
7631 #ifdef UA_ENABLE_TYPENAMES 7634 .namespaceZero =
true,
7642 #ifdef UA_ENABLE_TYPENAMES 7645 .namespaceZero =
true,
7653 #ifdef UA_ENABLE_TYPENAMES 7656 .namespaceZero =
true,
7664 #ifdef UA_ENABLE_TYPENAMES 7667 .namespaceZero =
true,
7675 #ifdef UA_ENABLE_TYPENAMES 7678 .namespaceZero =
true,
7686 #ifdef UA_ENABLE_TYPENAMES 7689 .namespaceZero =
true,
7697 #ifdef UA_ENABLE_TYPENAMES 7700 .namespaceZero =
true,
7708 #ifdef UA_ENABLE_TYPENAMES 7711 .namespaceZero =
true,
7719 #ifdef UA_ENABLE_TYPENAMES 7722 .namespaceZero =
true,
7730 #ifdef UA_ENABLE_TYPENAMES 7733 .namespaceZero =
true,
7741 #ifdef UA_ENABLE_TYPENAMES 7744 .namespaceZero =
true,
7752 #ifdef UA_ENABLE_TYPENAMES 7755 .namespaceZero =
true,
7763 #ifdef UA_ENABLE_TYPENAMES 7766 .namespaceZero =
true,
7774 #ifdef UA_ENABLE_TYPENAMES 7777 .namespaceZero =
true,
7785 #ifdef UA_ENABLE_TYPENAMES 7788 .namespaceZero =
true,
7796 #ifdef UA_ENABLE_TYPENAMES 7797 .memberName =
"namespaceIndex",
7799 .namespaceZero =
true,
7804 #ifdef UA_ENABLE_TYPENAMES 7805 .memberName =
"name",
7807 .namespaceZero =
true,
7815 #ifdef UA_ENABLE_TYPENAMES 7818 .namespaceZero =
true,
7826 #ifdef UA_ENABLE_TYPENAMES 7829 .namespaceZero =
true,
7837 #ifdef UA_ENABLE_TYPENAMES 7840 .namespaceZero =
true,
7848 #ifdef UA_ENABLE_TYPENAMES 7851 .namespaceZero =
true,
7859 #ifdef UA_ENABLE_TYPENAMES 7862 .namespaceZero =
true,
7870 #ifdef UA_ENABLE_TYPENAMES 7871 .memberName =
"certificateData",
7873 .namespaceZero =
true,
7878 #ifdef UA_ENABLE_TYPENAMES 7879 .memberName =
"signature",
7881 .namespaceZero =
true,
7889 #ifdef UA_ENABLE_TYPENAMES 7890 .memberName =
"targetId",
7892 .namespaceZero =
true,
7897 #ifdef UA_ENABLE_TYPENAMES 7898 .memberName =
"remainingPathIndex",
7900 .namespaceZero =
true,
7908 #ifdef UA_ENABLE_TYPENAMES 7909 .memberName =
"specifiedAttributes",
7911 .namespaceZero =
true,
7916 #ifdef UA_ENABLE_TYPENAMES 7917 .memberName =
"displayName",
7919 .namespaceZero =
true,
7924 #ifdef UA_ENABLE_TYPENAMES 7925 .memberName =
"description",
7927 .namespaceZero =
true,
7932 #ifdef UA_ENABLE_TYPENAMES 7933 .memberName =
"writeMask",
7935 .namespaceZero =
true,
7940 #ifdef UA_ENABLE_TYPENAMES 7941 .memberName =
"userWriteMask",
7943 .namespaceZero =
true,
7948 #ifdef UA_ENABLE_TYPENAMES 7949 .memberName =
"containsNoLoops",
7951 .namespaceZero =
true,
7956 #ifdef UA_ENABLE_TYPENAMES 7957 .memberName =
"eventNotifier",
7959 .namespaceZero =
true,
7967 #ifdef UA_ENABLE_TYPENAMES 7970 .namespaceZero =
true,
7978 #ifdef UA_ENABLE_TYPENAMES 7979 .memberName =
"authenticationToken",
7981 .namespaceZero =
true,
7986 #ifdef UA_ENABLE_TYPENAMES 7987 .memberName =
"timestamp",
7989 .namespaceZero =
true,
7994 #ifdef UA_ENABLE_TYPENAMES 7995 .memberName =
"requestHandle",
7997 .namespaceZero =
true,
8002 #ifdef UA_ENABLE_TYPENAMES 8003 .memberName =
"returnDiagnostics",
8005 .namespaceZero =
true,
8010 #ifdef UA_ENABLE_TYPENAMES 8011 .memberName =
"auditEntryId",
8013 .namespaceZero =
true,
8018 #ifdef UA_ENABLE_TYPENAMES 8019 .memberName =
"timeoutHint",
8021 .namespaceZero =
true,
8026 #ifdef UA_ENABLE_TYPENAMES 8027 .memberName =
"additionalHeader",
8029 .namespaceZero =
true,
8037 #ifdef UA_ENABLE_TYPENAMES 8038 .memberName =
"statusCode",
8040 .namespaceZero =
true,
8045 #ifdef UA_ENABLE_TYPENAMES 8046 .memberName =
"revisedSamplingInterval",
8048 .namespaceZero =
true,
8053 #ifdef UA_ENABLE_TYPENAMES 8054 .memberName =
"revisedQueueSize",
8056 .namespaceZero =
true,
8061 #ifdef UA_ENABLE_TYPENAMES 8062 .memberName =
"filterResult",
8064 .namespaceZero =
true,
8072 #ifdef UA_ENABLE_TYPENAMES 8073 .memberName =
"requestHeader",
8075 .namespaceZero =
true,
8083 #ifdef UA_ENABLE_TYPENAMES 8084 .memberName =
"statusCode",
8086 .namespaceZero =
true,
8091 #ifdef UA_ENABLE_TYPENAMES 8092 .memberName =
"addedNodeId",
8094 .namespaceZero =
true,
8102 #ifdef UA_ENABLE_TYPENAMES 8103 .memberName =
"specifiedAttributes",
8105 .namespaceZero =
true,
8110 #ifdef UA_ENABLE_TYPENAMES 8111 .memberName =
"displayName",
8113 .namespaceZero =
true,
8118 #ifdef UA_ENABLE_TYPENAMES 8119 .memberName =
"description",
8121 .namespaceZero =
true,
8126 #ifdef UA_ENABLE_TYPENAMES 8127 .memberName =
"writeMask",
8129 .namespaceZero =
true,
8134 #ifdef UA_ENABLE_TYPENAMES 8135 .memberName =
"userWriteMask",
8137 .namespaceZero =
true,
8142 #ifdef UA_ENABLE_TYPENAMES 8143 .memberName =
"value",
8145 .namespaceZero =
true,
8150 #ifdef UA_ENABLE_TYPENAMES 8151 .memberName =
"dataType",
8153 .namespaceZero =
true,
8158 #ifdef UA_ENABLE_TYPENAMES 8159 .memberName =
"valueRank",
8161 .namespaceZero =
true,
8166 #ifdef UA_ENABLE_TYPENAMES 8167 .memberName =
"arrayDimensions",
8169 .namespaceZero =
true,
8174 #ifdef UA_ENABLE_TYPENAMES 8175 .memberName =
"accessLevel",
8177 .namespaceZero =
true,
8182 #ifdef UA_ENABLE_TYPENAMES 8183 .memberName =
"userAccessLevel",
8185 .namespaceZero =
true,
8190 #ifdef UA_ENABLE_TYPENAMES 8191 .memberName =
"minimumSamplingInterval",
8193 .namespaceZero =
true,
8198 #ifdef UA_ENABLE_TYPENAMES 8199 .memberName =
"historizing",
8201 .namespaceZero =
true,
8209 #ifdef UA_ENABLE_TYPENAMES 8210 .memberName =
"sequenceNumber",
8212 .namespaceZero =
true,
8217 #ifdef UA_ENABLE_TYPENAMES 8218 .memberName =
"publishTime",
8220 .namespaceZero =
true,
8225 #ifdef UA_ENABLE_TYPENAMES 8226 .memberName =
"notificationData",
8228 .namespaceZero =
true,
8236 #ifdef UA_ENABLE_TYPENAMES 8239 .namespaceZero =
true,
8247 #ifdef UA_ENABLE_TYPENAMES 8250 .namespaceZero =
true,
8258 #ifdef UA_ENABLE_TYPENAMES 8259 .memberName =
"statusCode",
8261 .namespaceZero =
true,
8266 #ifdef UA_ENABLE_TYPENAMES 8267 .memberName =
"inputArgumentResults",
8269 .namespaceZero =
true,
8274 #ifdef UA_ENABLE_TYPENAMES 8275 .memberName =
"inputArgumentDiagnosticInfos",
8277 .namespaceZero =
true,
8282 #ifdef UA_ENABLE_TYPENAMES 8283 .memberName =
"outputArguments",
8285 .namespaceZero =
true,
8293 #ifdef UA_ENABLE_TYPENAMES 8294 .memberName =
"statusCode",
8296 .namespaceZero =
true,
8301 #ifdef UA_ENABLE_TYPENAMES 8302 .memberName =
"dataStatusCodes",
8304 .namespaceZero =
true,
8309 #ifdef UA_ENABLE_TYPENAMES 8310 .memberName =
"dataDiagnosticInfos",
8312 .namespaceZero =
true,
8320 #ifdef UA_ENABLE_TYPENAMES 8321 .memberName =
"referenceTypeId",
8323 .namespaceZero =
true,
8328 #ifdef UA_ENABLE_TYPENAMES 8329 .memberName =
"isInverse",
8331 .namespaceZero =
true,
8336 #ifdef UA_ENABLE_TYPENAMES 8337 .memberName =
"includeSubtypes",
8339 .namespaceZero =
true,
8344 #ifdef UA_ENABLE_TYPENAMES 8345 .memberName =
"targetName",
8347 .namespaceZero =
true,
8355 #ifdef UA_ENABLE_TYPENAMES 8358 .namespaceZero =
true,
8366 #ifdef UA_ENABLE_TYPENAMES 8367 .memberName =
"objectId",
8369 .namespaceZero =
true,
8374 #ifdef UA_ENABLE_TYPENAMES 8375 .memberName =
"methodId",
8377 .namespaceZero =
true,
8382 #ifdef UA_ENABLE_TYPENAMES 8383 .memberName =
"inputArguments",
8385 .namespaceZero =
true,
8393 #ifdef UA_ENABLE_TYPENAMES 8394 .memberName =
"requestHeader",
8396 .namespaceZero =
true,
8401 #ifdef UA_ENABLE_TYPENAMES 8402 .memberName =
"nodesToUnregister",
8404 .namespaceZero =
true,
8412 #ifdef UA_ENABLE_TYPENAMES 8413 .memberName =
"statusCode",
8415 .namespaceZero =
true,
8420 #ifdef UA_ENABLE_TYPENAMES 8421 .memberName =
"operandStatusCodes",
8423 .namespaceZero =
true,
8428 #ifdef UA_ENABLE_TYPENAMES 8429 .memberName =
"operandDiagnosticInfos",
8431 .namespaceZero =
true,
8439 #ifdef UA_ENABLE_TYPENAMES 8440 .memberName =
"nodeId",
8442 .namespaceZero =
true,
8447 #ifdef UA_ENABLE_TYPENAMES 8448 .memberName =
"typeDefinitionNode",
8450 .namespaceZero =
true,
8455 #ifdef UA_ENABLE_TYPENAMES 8456 .memberName =
"values",
8458 .namespaceZero =
true,
8466 #ifdef UA_ENABLE_TYPENAMES 8467 .memberName =
"policyId",
8469 .namespaceZero =
true,
8477 #ifdef UA_ENABLE_TYPENAMES 8478 .memberName =
"requestHeader",
8480 .namespaceZero =
true,
8485 #ifdef UA_ENABLE_TYPENAMES 8486 .memberName =
"publishingEnabled",
8488 .namespaceZero =
true,
8493 #ifdef UA_ENABLE_TYPENAMES 8494 .memberName =
"subscriptionIds",
8496 .namespaceZero =
true,
8504 #ifdef UA_ENABLE_TYPENAMES 8507 .namespaceZero =
true,
8515 #ifdef UA_ENABLE_TYPENAMES 8516 .memberName =
"requestHeader",
8518 .namespaceZero =
true,
8523 #ifdef UA_ENABLE_TYPENAMES 8524 .memberName =
"methodsToCall",
8526 .namespaceZero =
true,
8534 #ifdef UA_ENABLE_TYPENAMES 8535 .memberName =
"specifiedAttributes",
8537 .namespaceZero =
true,
8542 #ifdef UA_ENABLE_TYPENAMES 8543 .memberName =
"displayName",
8545 .namespaceZero =
true,
8550 #ifdef UA_ENABLE_TYPENAMES 8551 .memberName =
"description",
8553 .namespaceZero =
true,
8558 #ifdef UA_ENABLE_TYPENAMES 8559 .memberName =
"writeMask",
8561 .namespaceZero =
true,
8566 #ifdef UA_ENABLE_TYPENAMES 8567 .memberName =
"userWriteMask",
8569 .namespaceZero =
true,
8574 #ifdef UA_ENABLE_TYPENAMES 8575 .memberName =
"executable",
8577 .namespaceZero =
true,
8582 #ifdef UA_ENABLE_TYPENAMES 8583 .memberName =
"userExecutable",
8585 .namespaceZero =
true,
8593 #ifdef UA_ENABLE_TYPENAMES 8594 .memberName =
"sourceNodeId",
8596 .namespaceZero =
true,
8601 #ifdef UA_ENABLE_TYPENAMES 8602 .memberName =
"referenceTypeId",
8604 .namespaceZero =
true,
8609 #ifdef UA_ENABLE_TYPENAMES 8610 .memberName =
"isForward",
8612 .namespaceZero =
true,
8617 #ifdef UA_ENABLE_TYPENAMES 8618 .memberName =
"targetNodeId",
8620 .namespaceZero =
true,
8625 #ifdef UA_ENABLE_TYPENAMES 8626 .memberName =
"deleteBidirectional",
8628 .namespaceZero =
true,
8636 #ifdef UA_ENABLE_TYPENAMES 8637 .memberName =
"nodeId",
8639 .namespaceZero =
true,
8644 #ifdef UA_ENABLE_TYPENAMES 8645 .memberName =
"attributeId",
8647 .namespaceZero =
true,
8652 #ifdef UA_ENABLE_TYPENAMES 8653 .memberName =
"indexRange",
8655 .namespaceZero =
true,
8660 #ifdef UA_ENABLE_TYPENAMES 8661 .memberName =
"value",
8663 .namespaceZero =
true,
8671 #ifdef UA_ENABLE_TYPENAMES 8672 .memberName =
"statusCode",
8674 .namespaceZero =
true,
8679 #ifdef UA_ENABLE_TYPENAMES 8680 .memberName =
"monitoredItemId",
8682 .namespaceZero =
true,
8687 #ifdef UA_ENABLE_TYPENAMES 8688 .memberName =
"revisedSamplingInterval",
8690 .namespaceZero =
true,
8695 #ifdef UA_ENABLE_TYPENAMES 8696 .memberName =
"revisedQueueSize",
8698 .namespaceZero =
true,
8703 #ifdef UA_ENABLE_TYPENAMES 8704 .memberName =
"filterResult",
8706 .namespaceZero =
true,
8714 #ifdef UA_ENABLE_TYPENAMES 8717 .namespaceZero =
true,
8725 #ifdef UA_ENABLE_TYPENAMES 8726 .memberName =
"clientHandle",
8728 .namespaceZero =
true,
8733 #ifdef UA_ENABLE_TYPENAMES 8734 .memberName =
"samplingInterval",
8736 .namespaceZero =
true,
8741 #ifdef UA_ENABLE_TYPENAMES 8742 .memberName =
"filter",
8744 .namespaceZero =
true,
8749 #ifdef UA_ENABLE_TYPENAMES 8750 .memberName =
"queueSize",
8752 .namespaceZero =
true,
8757 #ifdef UA_ENABLE_TYPENAMES 8758 .memberName =
"discardOldest",
8760 .namespaceZero =
true,
8768 #ifdef UA_ENABLE_TYPENAMES 8769 .memberName =
"algorithm",
8771 .namespaceZero =
true,
8776 #ifdef UA_ENABLE_TYPENAMES 8777 .memberName =
"signature",
8779 .namespaceZero =
true,
8787 #ifdef UA_ENABLE_TYPENAMES 8788 .memberName =
"referenceTypeId",
8790 .namespaceZero =
true,
8795 #ifdef UA_ENABLE_TYPENAMES 8796 .memberName =
"isInverse",
8798 .namespaceZero =
true,
8803 #ifdef UA_ENABLE_TYPENAMES 8804 .memberName =
"targetId",
8806 .namespaceZero =
true,
8814 #ifdef UA_ENABLE_TYPENAMES 8815 .memberName =
"name",
8817 .namespaceZero =
true,
8822 #ifdef UA_ENABLE_TYPENAMES 8823 .memberName =
"dataType",
8825 .namespaceZero =
true,
8830 #ifdef UA_ENABLE_TYPENAMES 8831 .memberName =
"valueRank",
8833 .namespaceZero =
true,
8838 #ifdef UA_ENABLE_TYPENAMES 8839 .memberName =
"arrayDimensions",
8841 .namespaceZero =
true,
8846 #ifdef UA_ENABLE_TYPENAMES 8847 .memberName =
"description",
8849 .namespaceZero =
true,
8857 #ifdef UA_ENABLE_TYPENAMES 8858 .memberName =
"policyId",
8860 .namespaceZero =
true,
8868 #ifdef UA_ENABLE_TYPENAMES 8869 .memberName =
"specifiedAttributes",
8871 .namespaceZero =
true,
8876 #ifdef UA_ENABLE_TYPENAMES 8877 .memberName =
"displayName",
8879 .namespaceZero =
true,
8884 #ifdef UA_ENABLE_TYPENAMES 8885 .memberName =
"description",
8887 .namespaceZero =
true,
8892 #ifdef UA_ENABLE_TYPENAMES 8893 .memberName =
"writeMask",
8895 .namespaceZero =
true,
8900 #ifdef UA_ENABLE_TYPENAMES 8901 .memberName =
"userWriteMask",
8903 .namespaceZero =
true,
8908 #ifdef UA_ENABLE_TYPENAMES 8909 .memberName =
"isAbstract",
8911 .namespaceZero =
true,
8919 #ifdef UA_ENABLE_TYPENAMES 8922 .namespaceZero =
true,
8930 #ifdef UA_ENABLE_TYPENAMES 8933 .namespaceZero =
true,
8941 #ifdef UA_ENABLE_TYPENAMES 8944 .namespaceZero =
true,
8952 #ifdef UA_ENABLE_TYPENAMES 8953 .memberName =
"productUri",
8955 .namespaceZero =
true,
8960 #ifdef UA_ENABLE_TYPENAMES 8961 .memberName =
"manufacturerName",
8963 .namespaceZero =
true,
8968 #ifdef UA_ENABLE_TYPENAMES 8969 .memberName =
"productName",
8971 .namespaceZero =
true,
8976 #ifdef UA_ENABLE_TYPENAMES 8977 .memberName =
"softwareVersion",
8979 .namespaceZero =
true,
8984 #ifdef UA_ENABLE_TYPENAMES 8985 .memberName =
"buildNumber",
8987 .namespaceZero =
true,
8992 #ifdef UA_ENABLE_TYPENAMES 8993 .memberName =
"buildDate",
8995 .namespaceZero =
true,
9003 #ifdef UA_ENABLE_TYPENAMES 9006 .namespaceZero =
true,
9014 #ifdef UA_ENABLE_TYPENAMES 9015 .memberName =
"channelId",
9017 .namespaceZero =
true,
9022 #ifdef UA_ENABLE_TYPENAMES 9023 .memberName =
"tokenId",
9025 .namespaceZero =
true,
9030 #ifdef UA_ENABLE_TYPENAMES 9031 .memberName =
"createdAt",
9033 .namespaceZero =
true,
9038 #ifdef UA_ENABLE_TYPENAMES 9039 .memberName =
"revisedLifetime",
9041 .namespaceZero =
true,
9049 #ifdef UA_ENABLE_TYPENAMES 9050 .memberName =
"clientHandle",
9052 .namespaceZero =
true,
9057 #ifdef UA_ENABLE_TYPENAMES 9058 .memberName =
"value",
9060 .namespaceZero =
true,
9068 #ifdef UA_ENABLE_TYPENAMES 9069 .memberName =
"nodeId",
9071 .namespaceZero =
true,
9076 #ifdef UA_ENABLE_TYPENAMES 9077 .memberName =
"deleteTargetReferences",
9079 .namespaceZero =
true,
9087 #ifdef UA_ENABLE_TYPENAMES 9088 .memberName =
"subscriptionId",
9090 .namespaceZero =
true,
9095 #ifdef UA_ENABLE_TYPENAMES 9096 .memberName =
"sequenceNumber",
9098 .namespaceZero =
true,
9106 #ifdef UA_ENABLE_TYPENAMES 9107 .memberName =
"nodeId",
9109 .namespaceZero =
true,
9114 #ifdef UA_ENABLE_TYPENAMES 9115 .memberName =
"attributeId",
9117 .namespaceZero =
true,
9122 #ifdef UA_ENABLE_TYPENAMES 9123 .memberName =
"indexRange",
9125 .namespaceZero =
true,
9130 #ifdef UA_ENABLE_TYPENAMES 9131 .memberName =
"dataEncoding",
9133 .namespaceZero =
true,
9141 #ifdef UA_ENABLE_TYPENAMES 9142 .memberName =
"specifiedAttributes",
9144 .namespaceZero =
true,
9149 #ifdef UA_ENABLE_TYPENAMES 9150 .memberName =
"displayName",
9152 .namespaceZero =
true,
9157 #ifdef UA_ENABLE_TYPENAMES 9158 .memberName =
"description",
9160 .namespaceZero =
true,
9165 #ifdef UA_ENABLE_TYPENAMES 9166 .memberName =
"writeMask",
9168 .namespaceZero =
true,
9173 #ifdef UA_ENABLE_TYPENAMES 9174 .memberName =
"userWriteMask",
9176 .namespaceZero =
true,
9181 #ifdef UA_ENABLE_TYPENAMES 9182 .memberName =
"isAbstract",
9184 .namespaceZero =
true,
9192 #ifdef UA_ENABLE_TYPENAMES 9193 .memberName =
"timestamp",
9195 .namespaceZero =
true,
9200 #ifdef UA_ENABLE_TYPENAMES 9201 .memberName =
"requestHandle",
9203 .namespaceZero =
true,
9208 #ifdef UA_ENABLE_TYPENAMES 9209 .memberName =
"serviceResult",
9211 .namespaceZero =
true,
9216 #ifdef UA_ENABLE_TYPENAMES 9217 .memberName =
"serviceDiagnostics",
9219 .namespaceZero =
true,
9224 #ifdef UA_ENABLE_TYPENAMES 9225 .memberName =
"stringTable",
9227 .namespaceZero =
true,
9232 #ifdef UA_ENABLE_TYPENAMES 9233 .memberName =
"additionalHeader",
9235 .namespaceZero =
true,
9243 #ifdef UA_ENABLE_TYPENAMES 9244 .memberName =
"requestHeader",
9246 .namespaceZero =
true,
9251 #ifdef UA_ENABLE_TYPENAMES 9252 .memberName =
"subscriptionIds",
9254 .namespaceZero =
true,
9262 #ifdef UA_ENABLE_TYPENAMES 9263 .memberName =
"viewId",
9265 .namespaceZero =
true,
9270 #ifdef UA_ENABLE_TYPENAMES 9271 .memberName =
"timestamp",
9273 .namespaceZero =
true,
9278 #ifdef UA_ENABLE_TYPENAMES 9279 .memberName =
"viewVersion",
9281 .namespaceZero =
true,
9289 #ifdef UA_ENABLE_TYPENAMES 9290 .memberName =
"responseHeader",
9292 .namespaceZero =
true,
9297 #ifdef UA_ENABLE_TYPENAMES 9298 .memberName =
"results",
9300 .namespaceZero =
true,
9305 #ifdef UA_ENABLE_TYPENAMES 9306 .memberName =
"diagnosticInfos",
9308 .namespaceZero =
true,
9316 #ifdef UA_ENABLE_TYPENAMES 9317 .memberName =
"specifiedAttributes",
9319 .namespaceZero =
true,
9324 #ifdef UA_ENABLE_TYPENAMES 9325 .memberName =
"displayName",
9327 .namespaceZero =
true,
9332 #ifdef UA_ENABLE_TYPENAMES 9333 .memberName =
"description",
9335 .namespaceZero =
true,
9340 #ifdef UA_ENABLE_TYPENAMES 9341 .memberName =
"writeMask",
9343 .namespaceZero =
true,
9348 #ifdef UA_ENABLE_TYPENAMES 9349 .memberName =
"userWriteMask",
9351 .namespaceZero =
true,
9359 #ifdef UA_ENABLE_TYPENAMES 9360 .memberName =
"requestHeader",
9362 .namespaceZero =
true,
9367 #ifdef UA_ENABLE_TYPENAMES 9368 .memberName =
"nodesToRegister",
9370 .namespaceZero =
true,
9378 #ifdef UA_ENABLE_TYPENAMES 9379 .memberName =
"requestHeader",
9381 .namespaceZero =
true,
9386 #ifdef UA_ENABLE_TYPENAMES 9387 .memberName =
"nodesToDelete",
9389 .namespaceZero =
true,
9397 #ifdef UA_ENABLE_TYPENAMES 9398 .memberName =
"responseHeader",
9400 .namespaceZero =
true,
9405 #ifdef UA_ENABLE_TYPENAMES 9406 .memberName =
"subscriptionId",
9408 .namespaceZero =
true,
9413 #ifdef UA_ENABLE_TYPENAMES 9414 .memberName =
"availableSequenceNumbers",
9416 .namespaceZero =
true,
9421 #ifdef UA_ENABLE_TYPENAMES 9422 .memberName =
"moreNotifications",
9424 .namespaceZero =
true,
9429 #ifdef UA_ENABLE_TYPENAMES 9430 .memberName =
"notificationMessage",
9432 .namespaceZero =
true,
9437 #ifdef UA_ENABLE_TYPENAMES 9438 .memberName =
"results",
9440 .namespaceZero =
true,
9445 #ifdef UA_ENABLE_TYPENAMES 9446 .memberName =
"diagnosticInfos",
9448 .namespaceZero =
true,
9456 #ifdef UA_ENABLE_TYPENAMES 9457 .memberName =
"monitoredItemId",
9459 .namespaceZero =
true,
9464 #ifdef UA_ENABLE_TYPENAMES 9465 .memberName =
"requestedParameters",
9467 .namespaceZero =
true,
9475 #ifdef UA_ENABLE_TYPENAMES 9476 .memberName =
"policyId",
9478 .namespaceZero =
true,
9483 #ifdef UA_ENABLE_TYPENAMES 9484 .memberName =
"userName",
9486 .namespaceZero =
true,
9491 #ifdef UA_ENABLE_TYPENAMES 9492 .memberName =
"password",
9494 .namespaceZero =
true,
9499 #ifdef UA_ENABLE_TYPENAMES 9500 .memberName =
"encryptionAlgorithm",
9502 .namespaceZero =
true,
9510 #ifdef UA_ENABLE_TYPENAMES 9513 .namespaceZero =
true,
9521 #ifdef UA_ENABLE_TYPENAMES 9524 .namespaceZero =
true,
9532 #ifdef UA_ENABLE_TYPENAMES 9533 .memberName =
"requestHeader",
9535 .namespaceZero =
true,
9540 #ifdef UA_ENABLE_TYPENAMES 9541 .memberName =
"clientSignature",
9543 .namespaceZero =
true,
9548 #ifdef UA_ENABLE_TYPENAMES 9549 .memberName =
"clientSoftwareCertificates",
9551 .namespaceZero =
true,
9556 #ifdef UA_ENABLE_TYPENAMES 9557 .memberName =
"localeIds",
9559 .namespaceZero =
true,
9564 #ifdef UA_ENABLE_TYPENAMES 9565 .memberName =
"userIdentityToken",
9567 .namespaceZero =
true,
9572 #ifdef UA_ENABLE_TYPENAMES 9573 .memberName =
"userTokenSignature",
9575 .namespaceZero =
true,
9583 #ifdef UA_ENABLE_TYPENAMES 9584 .memberName =
"responseHeader",
9586 .namespaceZero =
true,
9591 #ifdef UA_ENABLE_TYPENAMES 9592 .memberName =
"serverProtocolVersion",
9594 .namespaceZero =
true,
9599 #ifdef UA_ENABLE_TYPENAMES 9600 .memberName =
"securityToken",
9602 .namespaceZero =
true,
9607 #ifdef UA_ENABLE_TYPENAMES 9608 .memberName =
"serverNonce",
9610 .namespaceZero =
true,
9618 #ifdef UA_ENABLE_TYPENAMES 9621 .namespaceZero =
true,
9629 #ifdef UA_ENABLE_TYPENAMES 9632 .namespaceZero =
true,
9640 #ifdef UA_ENABLE_TYPENAMES 9641 .memberName =
"responseHeader",
9643 .namespaceZero =
true,
9648 #ifdef UA_ENABLE_TYPENAMES 9649 .memberName =
"queryDataSets",
9651 .namespaceZero =
true,
9656 #ifdef UA_ENABLE_TYPENAMES 9657 .memberName =
"revisedContinuationPoint",
9659 .namespaceZero =
true,
9667 #ifdef UA_ENABLE_TYPENAMES 9668 .memberName =
"responseHeader",
9670 .namespaceZero =
true,
9675 #ifdef UA_ENABLE_TYPENAMES 9676 .memberName =
"serverNonce",
9678 .namespaceZero =
true,
9683 #ifdef UA_ENABLE_TYPENAMES 9684 .memberName =
"results",
9686 .namespaceZero =
true,
9691 #ifdef UA_ENABLE_TYPENAMES 9692 .memberName =
"diagnosticInfos",
9694 .namespaceZero =
true,
9702 #ifdef UA_ENABLE_TYPENAMES 9705 .namespaceZero =
true,
9713 #ifdef UA_ENABLE_TYPENAMES 9714 .memberName =
"requestHeader",
9716 .namespaceZero =
true,
9721 #ifdef UA_ENABLE_TYPENAMES 9722 .memberName =
"releaseContinuationPoint",
9724 .namespaceZero =
true,
9729 #ifdef UA_ENABLE_TYPENAMES 9730 .memberName =
"continuationPoint",
9732 .namespaceZero =
true,
9740 #ifdef UA_ENABLE_TYPENAMES 9741 .memberName =
"responseHeader",
9743 .namespaceZero =
true,
9748 #ifdef UA_ENABLE_TYPENAMES 9749 .memberName =
"results",
9751 .namespaceZero =
true,
9756 #ifdef UA_ENABLE_TYPENAMES 9757 .memberName =
"diagnosticInfos",
9759 .namespaceZero =
true,
9767 #ifdef UA_ENABLE_TYPENAMES 9768 .memberName =
"requestHeader",
9770 .namespaceZero =
true,
9775 #ifdef UA_ENABLE_TYPENAMES 9776 .memberName =
"releaseContinuationPoints",
9778 .namespaceZero =
true,
9783 #ifdef UA_ENABLE_TYPENAMES 9784 .memberName =
"continuationPoints",
9786 .namespaceZero =
true,
9794 #ifdef UA_ENABLE_TYPENAMES 9795 .memberName =
"requestHeader",
9797 .namespaceZero =
true,
9802 #ifdef UA_ENABLE_TYPENAMES 9803 .memberName =
"requestedPublishingInterval",
9805 .namespaceZero =
true,
9810 #ifdef UA_ENABLE_TYPENAMES 9811 .memberName =
"requestedLifetimeCount",
9813 .namespaceZero =
true,
9818 #ifdef UA_ENABLE_TYPENAMES 9819 .memberName =
"requestedMaxKeepAliveCount",
9821 .namespaceZero =
true,
9826 #ifdef UA_ENABLE_TYPENAMES 9827 .memberName =
"maxNotificationsPerPublish",
9829 .namespaceZero =
true,
9834 #ifdef UA_ENABLE_TYPENAMES 9835 .memberName =
"publishingEnabled",
9837 .namespaceZero =
true,
9842 #ifdef UA_ENABLE_TYPENAMES 9843 .memberName =
"priority",
9845 .namespaceZero =
true,
9853 #ifdef UA_ENABLE_TYPENAMES 9854 .memberName =
"specifiedAttributes",
9856 .namespaceZero =
true,
9861 #ifdef UA_ENABLE_TYPENAMES 9862 .memberName =
"displayName",
9864 .namespaceZero =
true,
9869 #ifdef UA_ENABLE_TYPENAMES 9870 .memberName =
"description",
9872 .namespaceZero =
true,
9877 #ifdef UA_ENABLE_TYPENAMES 9878 .memberName =
"writeMask",
9880 .namespaceZero =
true,
9885 #ifdef UA_ENABLE_TYPENAMES 9886 .memberName =
"userWriteMask",
9888 .namespaceZero =
true,
9893 #ifdef UA_ENABLE_TYPENAMES 9894 .memberName =
"value",
9896 .namespaceZero =
true,
9901 #ifdef UA_ENABLE_TYPENAMES 9902 .memberName =
"dataType",
9904 .namespaceZero =
true,
9909 #ifdef UA_ENABLE_TYPENAMES 9910 .memberName =
"valueRank",
9912 .namespaceZero =
true,
9917 #ifdef UA_ENABLE_TYPENAMES 9918 .memberName =
"arrayDimensions",
9920 .namespaceZero =
true,
9925 #ifdef UA_ENABLE_TYPENAMES 9926 .memberName =
"isAbstract",
9928 .namespaceZero =
true,
9936 #ifdef UA_ENABLE_TYPENAMES 9937 .memberName =
"statusCode",
9939 .namespaceZero =
true,
9944 #ifdef UA_ENABLE_TYPENAMES 9945 .memberName =
"targets",
9947 .namespaceZero =
true,
9955 #ifdef UA_ENABLE_TYPENAMES 9956 .memberName =
"responseHeader",
9958 .namespaceZero =
true,
9963 #ifdef UA_ENABLE_TYPENAMES 9964 .memberName =
"revisedPublishingInterval",
9966 .namespaceZero =
true,
9971 #ifdef UA_ENABLE_TYPENAMES 9972 .memberName =
"revisedLifetimeCount",
9974 .namespaceZero =
true,
9979 #ifdef UA_ENABLE_TYPENAMES 9980 .memberName =
"revisedMaxKeepAliveCount",
9982 .namespaceZero =
true,
9990 #ifdef UA_ENABLE_TYPENAMES 9991 .memberName =
"requestHeader",
9993 .namespaceZero =
true,
9998 #ifdef UA_ENABLE_TYPENAMES 9999 .memberName =
"clientProtocolVersion",
10001 .namespaceZero =
true,
10006 #ifdef UA_ENABLE_TYPENAMES 10007 .memberName =
"requestType",
10009 .namespaceZero =
true,
10014 #ifdef UA_ENABLE_TYPENAMES 10015 .memberName =
"securityMode",
10017 .namespaceZero =
true,
10022 #ifdef UA_ENABLE_TYPENAMES 10023 .memberName =
"clientNonce",
10025 .namespaceZero =
true,
10030 #ifdef UA_ENABLE_TYPENAMES 10031 .memberName =
"requestedLifetime",
10033 .namespaceZero =
true,
10041 #ifdef UA_ENABLE_TYPENAMES 10042 .memberName =
"responseHeader",
10044 .namespaceZero =
true,
10049 #ifdef UA_ENABLE_TYPENAMES 10050 .memberName =
"registeredNodeIds",
10052 .namespaceZero =
true,
10060 #ifdef UA_ENABLE_TYPENAMES 10061 .memberName =
"requestHeader",
10063 .namespaceZero =
true,
10068 #ifdef UA_ENABLE_TYPENAMES 10069 .memberName =
"deleteSubscriptions",
10071 .namespaceZero =
true,
10079 #ifdef UA_ENABLE_TYPENAMES 10080 .memberName =
"requestHeader",
10082 .namespaceZero =
true,
10087 #ifdef UA_ENABLE_TYPENAMES 10088 .memberName =
"subscriptionId",
10090 .namespaceZero =
true,
10095 #ifdef UA_ENABLE_TYPENAMES 10096 .memberName =
"requestedPublishingInterval",
10098 .namespaceZero =
true,
10103 #ifdef UA_ENABLE_TYPENAMES 10104 .memberName =
"requestedLifetimeCount",
10106 .namespaceZero =
true,
10111 #ifdef UA_ENABLE_TYPENAMES 10112 .memberName =
"requestedMaxKeepAliveCount",
10114 .namespaceZero =
true,
10119 #ifdef UA_ENABLE_TYPENAMES 10120 .memberName =
"maxNotificationsPerPublish",
10122 .namespaceZero =
true,
10127 #ifdef UA_ENABLE_TYPENAMES 10128 .memberName =
"priority",
10130 .namespaceZero =
true,
10138 #ifdef UA_ENABLE_TYPENAMES 10139 .memberName =
"policyId",
10141 .namespaceZero =
true,
10146 #ifdef UA_ENABLE_TYPENAMES 10147 .memberName =
"tokenType",
10149 .namespaceZero =
true,
10154 #ifdef UA_ENABLE_TYPENAMES 10155 .memberName =
"issuedTokenType",
10157 .namespaceZero =
true,
10162 #ifdef UA_ENABLE_TYPENAMES 10163 .memberName =
"issuerEndpointUrl",
10165 .namespaceZero =
true,
10170 #ifdef UA_ENABLE_TYPENAMES 10171 .memberName =
"securityPolicyUri",
10173 .namespaceZero =
true,
10181 #ifdef UA_ENABLE_TYPENAMES 10182 .memberName =
"requestHeader",
10184 .namespaceZero =
true,
10189 #ifdef UA_ENABLE_TYPENAMES 10190 .memberName =
"subscriptionId",
10192 .namespaceZero =
true,
10197 #ifdef UA_ENABLE_TYPENAMES 10198 .memberName =
"monitoredItemIds",
10200 .namespaceZero =
true,
10208 #ifdef UA_ENABLE_TYPENAMES 10209 .memberName =
"specifiedAttributes",
10211 .namespaceZero =
true,
10216 #ifdef UA_ENABLE_TYPENAMES 10217 .memberName =
"displayName",
10219 .namespaceZero =
true,
10224 #ifdef UA_ENABLE_TYPENAMES 10225 .memberName =
"description",
10227 .namespaceZero =
true,
10232 #ifdef UA_ENABLE_TYPENAMES 10233 .memberName =
"writeMask",
10235 .namespaceZero =
true,
10240 #ifdef UA_ENABLE_TYPENAMES 10241 .memberName =
"userWriteMask",
10243 .namespaceZero =
true,
10248 #ifdef UA_ENABLE_TYPENAMES 10249 .memberName =
"isAbstract",
10251 .namespaceZero =
true,
10256 #ifdef UA_ENABLE_TYPENAMES 10257 .memberName =
"symmetric",
10259 .namespaceZero =
true,
10264 #ifdef UA_ENABLE_TYPENAMES 10265 .memberName =
"inverseName",
10267 .namespaceZero =
true,
10275 #ifdef UA_ENABLE_TYPENAMES 10276 .memberName =
"requestHeader",
10278 .namespaceZero =
true,
10283 #ifdef UA_ENABLE_TYPENAMES 10284 .memberName =
"subscriptionId",
10286 .namespaceZero =
true,
10291 #ifdef UA_ENABLE_TYPENAMES 10292 .memberName =
"monitoringMode",
10294 .namespaceZero =
true,
10299 #ifdef UA_ENABLE_TYPENAMES 10300 .memberName =
"monitoredItemIds",
10302 .namespaceZero =
true,
10310 #ifdef UA_ENABLE_TYPENAMES 10311 .memberName =
"responseHeader",
10313 .namespaceZero =
true,
10321 #ifdef UA_ENABLE_TYPENAMES 10322 .memberName =
"requestHeader",
10324 .namespaceZero =
true,
10329 #ifdef UA_ENABLE_TYPENAMES 10330 .memberName =
"nodesToWrite",
10332 .namespaceZero =
true,
10340 #ifdef UA_ENABLE_TYPENAMES 10341 .memberName =
"specifiedAttributes",
10343 .namespaceZero =
true,
10348 #ifdef UA_ENABLE_TYPENAMES 10349 .memberName =
"displayName",
10351 .namespaceZero =
true,
10356 #ifdef UA_ENABLE_TYPENAMES 10357 .memberName =
"description",
10359 .namespaceZero =
true,
10364 #ifdef UA_ENABLE_TYPENAMES 10365 .memberName =
"writeMask",
10367 .namespaceZero =
true,
10372 #ifdef UA_ENABLE_TYPENAMES 10373 .memberName =
"userWriteMask",
10375 .namespaceZero =
true,
10380 #ifdef UA_ENABLE_TYPENAMES 10381 .memberName =
"eventNotifier",
10383 .namespaceZero =
true,
10391 #ifdef UA_ENABLE_TYPENAMES 10392 .memberName =
"nodeId",
10394 .namespaceZero =
true,
10399 #ifdef UA_ENABLE_TYPENAMES 10400 .memberName =
"browseDirection",
10402 .namespaceZero =
true,
10407 #ifdef UA_ENABLE_TYPENAMES 10408 .memberName =
"referenceTypeId",
10410 .namespaceZero =
true,
10415 #ifdef UA_ENABLE_TYPENAMES 10416 .memberName =
"includeSubtypes",
10418 .namespaceZero =
true,
10423 #ifdef UA_ENABLE_TYPENAMES 10424 .memberName =
"nodeClassMask",
10426 .namespaceZero =
true,
10431 #ifdef UA_ENABLE_TYPENAMES 10432 .memberName =
"resultMask",
10434 .namespaceZero =
true,
10442 #ifdef UA_ENABLE_TYPENAMES 10443 .memberName =
"requestHeader",
10445 .namespaceZero =
true,
10450 #ifdef UA_ENABLE_TYPENAMES 10451 .memberName =
"subscriptionId",
10453 .namespaceZero =
true,
10458 #ifdef UA_ENABLE_TYPENAMES 10459 .memberName =
"retransmitSequenceNumber",
10461 .namespaceZero =
true,
10469 #ifdef UA_ENABLE_TYPENAMES 10470 .memberName =
"requestHeader",
10472 .namespaceZero =
true,
10477 #ifdef UA_ENABLE_TYPENAMES 10478 .memberName =
"endpointUrl",
10480 .namespaceZero =
true,
10485 #ifdef UA_ENABLE_TYPENAMES 10486 .memberName =
"localeIds",
10488 .namespaceZero =
true,
10493 #ifdef UA_ENABLE_TYPENAMES 10494 .memberName =
"profileUris",
10496 .namespaceZero =
true,
10504 #ifdef UA_ENABLE_TYPENAMES 10505 .memberName =
"requestHeader",
10507 .namespaceZero =
true,
10512 #ifdef UA_ENABLE_TYPENAMES 10513 .memberName =
"subscriptionAcknowledgements",
10515 .namespaceZero =
true,
10523 #ifdef UA_ENABLE_TYPENAMES 10524 .memberName =
"responseHeader",
10526 .namespaceZero =
true,
10531 #ifdef UA_ENABLE_TYPENAMES 10532 .memberName =
"results",
10534 .namespaceZero =
true,
10539 #ifdef UA_ENABLE_TYPENAMES 10540 .memberName =
"diagnosticInfos",
10542 .namespaceZero =
true,
10550 #ifdef UA_ENABLE_TYPENAMES 10551 .memberName =
"monitoredItems",
10553 .namespaceZero =
true,
10558 #ifdef UA_ENABLE_TYPENAMES 10559 .memberName =
"diagnosticInfos",
10561 .namespaceZero =
true,
10569 #ifdef UA_ENABLE_TYPENAMES 10570 .memberName =
"responseHeader",
10572 .namespaceZero =
true,
10580 #ifdef UA_ENABLE_TYPENAMES 10581 .memberName =
"requestHeader",
10583 .namespaceZero =
true,
10588 #ifdef UA_ENABLE_TYPENAMES 10589 .memberName =
"subscriptionId",
10591 .namespaceZero =
true,
10596 #ifdef UA_ENABLE_TYPENAMES 10597 .memberName =
"timestampsToReturn",
10599 .namespaceZero =
true,
10604 #ifdef UA_ENABLE_TYPENAMES 10605 .memberName =
"itemsToModify",
10607 .namespaceZero =
true,
10615 #ifdef UA_ENABLE_TYPENAMES 10616 .memberName =
"responseHeader",
10618 .namespaceZero =
true,
10623 #ifdef UA_ENABLE_TYPENAMES 10624 .memberName =
"results",
10626 .namespaceZero =
true,
10631 #ifdef UA_ENABLE_TYPENAMES 10632 .memberName =
"diagnosticInfos",
10634 .namespaceZero =
true,
10642 #ifdef UA_ENABLE_TYPENAMES 10643 .memberName =
"requestHeader",
10645 .namespaceZero =
true,
10650 #ifdef UA_ENABLE_TYPENAMES 10651 .memberName =
"endpointUrl",
10653 .namespaceZero =
true,
10658 #ifdef UA_ENABLE_TYPENAMES 10659 .memberName =
"localeIds",
10661 .namespaceZero =
true,
10666 #ifdef UA_ENABLE_TYPENAMES 10667 .memberName =
"serverUris",
10669 .namespaceZero =
true,
10677 #ifdef UA_ENABLE_TYPENAMES 10678 .memberName =
"referenceTypeId",
10680 .namespaceZero =
true,
10685 #ifdef UA_ENABLE_TYPENAMES 10686 .memberName =
"isForward",
10688 .namespaceZero =
true,
10693 #ifdef UA_ENABLE_TYPENAMES 10694 .memberName =
"nodeId",
10696 .namespaceZero =
true,
10701 #ifdef UA_ENABLE_TYPENAMES 10702 .memberName =
"browseName",
10704 .namespaceZero =
true,
10709 #ifdef UA_ENABLE_TYPENAMES 10710 .memberName =
"displayName",
10712 .namespaceZero =
true,
10717 #ifdef UA_ENABLE_TYPENAMES 10718 .memberName =
"nodeClass",
10720 .namespaceZero =
true,
10725 #ifdef UA_ENABLE_TYPENAMES 10726 .memberName =
"typeDefinition",
10728 .namespaceZero =
true,
10736 #ifdef UA_ENABLE_TYPENAMES 10737 .memberName =
"responseHeader",
10739 .namespaceZero =
true,
10744 #ifdef UA_ENABLE_TYPENAMES 10745 .memberName =
"results",
10747 .namespaceZero =
true,
10752 #ifdef UA_ENABLE_TYPENAMES 10753 .memberName =
"diagnosticInfos",
10755 .namespaceZero =
true,
10763 #ifdef UA_ENABLE_TYPENAMES 10764 .memberName =
"elementResults",
10766 .namespaceZero =
true,
10771 #ifdef UA_ENABLE_TYPENAMES 10772 .memberName =
"elementDiagnosticInfos",
10774 .namespaceZero =
true,
10782 #ifdef UA_ENABLE_TYPENAMES 10783 .memberName =
"sourceNodeId",
10785 .namespaceZero =
true,
10790 #ifdef UA_ENABLE_TYPENAMES 10791 .memberName =
"referenceTypeId",
10793 .namespaceZero =
true,
10798 #ifdef UA_ENABLE_TYPENAMES 10799 .memberName =
"isForward",
10801 .namespaceZero =
true,
10806 #ifdef UA_ENABLE_TYPENAMES 10807 .memberName =
"targetServerUri",
10809 .namespaceZero =
true,
10814 #ifdef UA_ENABLE_TYPENAMES 10815 .memberName =
"targetNodeId",
10817 .namespaceZero =
true,
10822 #ifdef UA_ENABLE_TYPENAMES 10823 .memberName =
"targetNodeClass",
10825 .namespaceZero =
true,
10833 #ifdef UA_ENABLE_TYPENAMES 10834 .memberName =
"responseHeader",
10836 .namespaceZero =
true,
10841 #ifdef UA_ENABLE_TYPENAMES 10842 .memberName =
"subscriptionId",
10844 .namespaceZero =
true,
10849 #ifdef UA_ENABLE_TYPENAMES 10850 .memberName =
"revisedPublishingInterval",
10852 .namespaceZero =
true,
10857 #ifdef UA_ENABLE_TYPENAMES 10858 .memberName =
"revisedLifetimeCount",
10860 .namespaceZero =
true,
10865 #ifdef UA_ENABLE_TYPENAMES 10866 .memberName =
"revisedMaxKeepAliveCount",
10868 .namespaceZero =
true,
10876 #ifdef UA_ENABLE_TYPENAMES 10877 .memberName =
"responseHeader",
10879 .namespaceZero =
true,
10884 #ifdef UA_ENABLE_TYPENAMES 10885 .memberName =
"results",
10887 .namespaceZero =
true,
10892 #ifdef UA_ENABLE_TYPENAMES 10893 .memberName =
"diagnosticInfos",
10895 .namespaceZero =
true,
10903 #ifdef UA_ENABLE_TYPENAMES 10904 .memberName =
"elements",
10906 .namespaceZero =
true,
10914 #ifdef UA_ENABLE_TYPENAMES 10915 .memberName =
"responseHeader",
10917 .namespaceZero =
true,
10922 #ifdef UA_ENABLE_TYPENAMES 10923 .memberName =
"results",
10925 .namespaceZero =
true,
10930 #ifdef UA_ENABLE_TYPENAMES 10931 .memberName =
"diagnosticInfos",
10933 .namespaceZero =
true,
10941 #ifdef UA_ENABLE_TYPENAMES 10942 .memberName =
"responseHeader",
10944 .namespaceZero =
true,
10949 #ifdef UA_ENABLE_TYPENAMES 10950 .memberName =
"results",
10952 .namespaceZero =
true,
10957 #ifdef UA_ENABLE_TYPENAMES 10958 .memberName =
"diagnosticInfos",
10960 .namespaceZero =
true,
10968 #ifdef UA_ENABLE_TYPENAMES 10969 .memberName =
"responseHeader",
10971 .namespaceZero =
true,
10976 #ifdef UA_ENABLE_TYPENAMES 10977 .memberName =
"results",
10979 .namespaceZero =
true,
10984 #ifdef UA_ENABLE_TYPENAMES 10985 .memberName =
"diagnosticInfos",
10987 .namespaceZero =
true,
10995 #ifdef UA_ENABLE_TYPENAMES 10996 .memberName =
"responseHeader",
10998 .namespaceZero =
true,
11003 #ifdef UA_ENABLE_TYPENAMES 11004 .memberName =
"results",
11006 .namespaceZero =
true,
11011 #ifdef UA_ENABLE_TYPENAMES 11012 .memberName =
"diagnosticInfos",
11014 .namespaceZero =
true,
11022 #ifdef UA_ENABLE_TYPENAMES 11023 .memberName =
"responseHeader",
11025 .namespaceZero =
true,
11030 #ifdef UA_ENABLE_TYPENAMES 11031 .memberName =
"notificationMessage",
11033 .namespaceZero =
true,
11041 #ifdef UA_ENABLE_TYPENAMES 11042 .memberName =
"itemToMonitor",
11044 .namespaceZero =
true,
11049 #ifdef UA_ENABLE_TYPENAMES 11050 .memberName =
"monitoringMode",
11052 .namespaceZero =
true,
11057 #ifdef UA_ENABLE_TYPENAMES 11058 .memberName =
"requestedParameters",
11060 .namespaceZero =
true,
11068 #ifdef UA_ENABLE_TYPENAMES 11069 .memberName =
"requestHeader",
11071 .namespaceZero =
true,
11076 #ifdef UA_ENABLE_TYPENAMES 11077 .memberName =
"referencesToDelete",
11079 .namespaceZero =
true,
11087 #ifdef UA_ENABLE_TYPENAMES 11088 .memberName =
"responseHeader",
11090 .namespaceZero =
true,
11095 #ifdef UA_ENABLE_TYPENAMES 11096 .memberName =
"results",
11098 .namespaceZero =
true,
11103 #ifdef UA_ENABLE_TYPENAMES 11104 .memberName =
"diagnosticInfos",
11106 .namespaceZero =
true,
11114 #ifdef UA_ENABLE_TYPENAMES 11115 .memberName =
"responseHeader",
11117 .namespaceZero =
true,
11122 #ifdef UA_ENABLE_TYPENAMES 11123 .memberName =
"results",
11125 .namespaceZero =
true,
11130 #ifdef UA_ENABLE_TYPENAMES 11131 .memberName =
"diagnosticInfos",
11133 .namespaceZero =
true,
11141 #ifdef UA_ENABLE_TYPENAMES 11142 .memberName =
"requestHeader",
11144 .namespaceZero =
true,
11149 #ifdef UA_ENABLE_TYPENAMES 11150 .memberName =
"referencesToAdd",
11152 .namespaceZero =
true,
11160 #ifdef UA_ENABLE_TYPENAMES 11161 .memberName =
"requestHeader",
11163 .namespaceZero =
true,
11168 #ifdef UA_ENABLE_TYPENAMES 11169 .memberName =
"maxAge",
11171 .namespaceZero =
true,
11176 #ifdef UA_ENABLE_TYPENAMES 11177 .memberName =
"timestampsToReturn",
11179 .namespaceZero =
true,
11184 #ifdef UA_ENABLE_TYPENAMES 11185 .memberName =
"nodesToRead",
11187 .namespaceZero =
true,
11195 #ifdef UA_ENABLE_TYPENAMES 11196 .memberName =
"parentNodeId",
11198 .namespaceZero =
true,
11203 #ifdef UA_ENABLE_TYPENAMES 11204 .memberName =
"referenceTypeId",
11206 .namespaceZero =
true,
11211 #ifdef UA_ENABLE_TYPENAMES 11212 .memberName =
"requestedNewNodeId",
11214 .namespaceZero =
true,
11219 #ifdef UA_ENABLE_TYPENAMES 11220 .memberName =
"browseName",
11222 .namespaceZero =
true,
11227 #ifdef UA_ENABLE_TYPENAMES 11228 .memberName =
"nodeClass",
11230 .namespaceZero =
true,
11235 #ifdef UA_ENABLE_TYPENAMES 11236 .memberName =
"nodeAttributes",
11238 .namespaceZero =
true,
11243 #ifdef UA_ENABLE_TYPENAMES 11244 .memberName =
"typeDefinition",
11246 .namespaceZero =
true,
11254 #ifdef UA_ENABLE_TYPENAMES 11255 .memberName =
"startTime",
11257 .namespaceZero =
true,
11262 #ifdef UA_ENABLE_TYPENAMES 11263 .memberName =
"currentTime",
11265 .namespaceZero =
true,
11270 #ifdef UA_ENABLE_TYPENAMES 11271 .memberName =
"state",
11273 .namespaceZero =
true,
11278 #ifdef UA_ENABLE_TYPENAMES 11279 .memberName =
"buildInfo",
11281 .namespaceZero =
true,
11286 #ifdef UA_ENABLE_TYPENAMES 11287 .memberName =
"secondsTillShutdown",
11289 .namespaceZero =
true,
11294 #ifdef UA_ENABLE_TYPENAMES 11295 .memberName =
"shutdownReason",
11297 .namespaceZero =
true,
11305 #ifdef UA_ENABLE_TYPENAMES 11306 .memberName =
"responseHeader",
11308 .namespaceZero =
true,
11313 #ifdef UA_ENABLE_TYPENAMES 11314 .memberName =
"results",
11316 .namespaceZero =
true,
11321 #ifdef UA_ENABLE_TYPENAMES 11322 .memberName =
"diagnosticInfos",
11324 .namespaceZero =
true,
11332 #ifdef UA_ENABLE_TYPENAMES 11333 .memberName =
"responseHeader",
11335 .namespaceZero =
true,
11340 #ifdef UA_ENABLE_TYPENAMES 11341 .memberName =
"results",
11343 .namespaceZero =
true,
11348 #ifdef UA_ENABLE_TYPENAMES 11349 .memberName =
"diagnosticInfos",
11351 .namespaceZero =
true,
11359 #ifdef UA_ENABLE_TYPENAMES 11360 .memberName =
"trigger",
11362 .namespaceZero =
true,
11367 #ifdef UA_ENABLE_TYPENAMES 11368 .memberName =
"deadbandType",
11370 .namespaceZero =
true,
11375 #ifdef UA_ENABLE_TYPENAMES 11376 .memberName =
"deadbandValue",
11378 .namespaceZero =
true,
11386 #ifdef UA_ENABLE_TYPENAMES 11387 .memberName =
"filterOperator",
11389 .namespaceZero =
true,
11394 #ifdef UA_ENABLE_TYPENAMES 11395 .memberName =
"filterOperands",
11397 .namespaceZero =
true,
11405 #ifdef UA_ENABLE_TYPENAMES 11406 .memberName =
"responseHeader",
11408 .namespaceZero =
true,
11416 #ifdef UA_ENABLE_TYPENAMES 11417 .memberName =
"applicationUri",
11419 .namespaceZero =
true,
11424 #ifdef UA_ENABLE_TYPENAMES 11425 .memberName =
"productUri",
11427 .namespaceZero =
true,
11432 #ifdef UA_ENABLE_TYPENAMES 11433 .memberName =
"applicationName",
11435 .namespaceZero =
true,
11440 #ifdef UA_ENABLE_TYPENAMES 11441 .memberName =
"applicationType",
11443 .namespaceZero =
true,
11448 #ifdef UA_ENABLE_TYPENAMES 11449 .memberName =
"gatewayServerUri",
11451 .namespaceZero =
true,
11456 #ifdef UA_ENABLE_TYPENAMES 11457 .memberName =
"discoveryProfileUri",
11459 .namespaceZero =
true,
11464 #ifdef UA_ENABLE_TYPENAMES 11465 .memberName =
"discoveryUrls",
11467 .namespaceZero =
true,
11475 #ifdef UA_ENABLE_TYPENAMES 11476 .memberName =
"responseHeader",
11478 .namespaceZero =
true,
11486 #ifdef UA_ENABLE_TYPENAMES 11487 .memberName =
"responseHeader",
11489 .namespaceZero =
true,
11494 #ifdef UA_ENABLE_TYPENAMES 11495 .memberName =
"servers",
11497 .namespaceZero =
true,
11505 #ifdef UA_ENABLE_TYPENAMES 11506 .memberName =
"requestHeader",
11508 .namespaceZero =
true,
11513 #ifdef UA_ENABLE_TYPENAMES 11514 .memberName =
"subscriptionId",
11516 .namespaceZero =
true,
11521 #ifdef UA_ENABLE_TYPENAMES 11522 .memberName =
"timestampsToReturn",
11524 .namespaceZero =
true,
11529 #ifdef UA_ENABLE_TYPENAMES 11530 .memberName =
"itemsToCreate",
11532 .namespaceZero =
true,
11540 #ifdef UA_ENABLE_TYPENAMES 11541 .memberName =
"elements",
11543 .namespaceZero =
true,
11551 #ifdef UA_ENABLE_TYPENAMES 11552 .memberName =
"responseHeader",
11554 .namespaceZero =
true,
11559 #ifdef UA_ENABLE_TYPENAMES 11560 .memberName =
"queryDataSets",
11562 .namespaceZero =
true,
11567 #ifdef UA_ENABLE_TYPENAMES 11568 .memberName =
"continuationPoint",
11570 .namespaceZero =
true,
11575 #ifdef UA_ENABLE_TYPENAMES 11576 .memberName =
"parsingResults",
11578 .namespaceZero =
true,
11583 #ifdef UA_ENABLE_TYPENAMES 11584 .memberName =
"diagnosticInfos",
11586 .namespaceZero =
true,
11591 #ifdef UA_ENABLE_TYPENAMES 11592 .memberName =
"filterResult",
11594 .namespaceZero =
true,
11602 #ifdef UA_ENABLE_TYPENAMES 11603 .memberName =
"requestHeader",
11605 .namespaceZero =
true,
11610 #ifdef UA_ENABLE_TYPENAMES 11611 .memberName =
"nodesToAdd",
11613 .namespaceZero =
true,
11621 #ifdef UA_ENABLE_TYPENAMES 11622 .memberName =
"requestHeader",
11624 .namespaceZero =
true,
11629 #ifdef UA_ENABLE_TYPENAMES 11630 .memberName =
"view",
11632 .namespaceZero =
true,
11637 #ifdef UA_ENABLE_TYPENAMES 11638 .memberName =
"requestedMaxReferencesPerNode",
11640 .namespaceZero =
true,
11645 #ifdef UA_ENABLE_TYPENAMES 11646 .memberName =
"nodesToBrowse",
11648 .namespaceZero =
true,
11656 #ifdef UA_ENABLE_TYPENAMES 11657 .memberName =
"startingNode",
11659 .namespaceZero =
true,
11664 #ifdef UA_ENABLE_TYPENAMES 11665 .memberName =
"relativePath",
11667 .namespaceZero =
true,
11675 #ifdef UA_ENABLE_TYPENAMES 11676 .memberName =
"statusCode",
11678 .namespaceZero =
true,
11683 #ifdef UA_ENABLE_TYPENAMES 11684 .memberName =
"continuationPoint",
11686 .namespaceZero =
true,
11691 #ifdef UA_ENABLE_TYPENAMES 11692 .memberName =
"references",
11694 .namespaceZero =
true,
11702 #ifdef UA_ENABLE_TYPENAMES 11703 .memberName =
"requestHeader",
11705 .namespaceZero =
true,
11710 #ifdef UA_ENABLE_TYPENAMES 11711 .memberName =
"clientDescription",
11713 .namespaceZero =
true,
11718 #ifdef UA_ENABLE_TYPENAMES 11719 .memberName =
"serverUri",
11721 .namespaceZero =
true,
11726 #ifdef UA_ENABLE_TYPENAMES 11727 .memberName =
"endpointUrl",
11729 .namespaceZero =
true,
11734 #ifdef UA_ENABLE_TYPENAMES 11735 .memberName =
"sessionName",
11737 .namespaceZero =
true,
11742 #ifdef UA_ENABLE_TYPENAMES 11743 .memberName =
"clientNonce",
11745 .namespaceZero =
true,
11750 #ifdef UA_ENABLE_TYPENAMES 11751 .memberName =
"clientCertificate",
11753 .namespaceZero =
true,
11758 #ifdef UA_ENABLE_TYPENAMES 11759 .memberName =
"requestedSessionTimeout",
11761 .namespaceZero =
true,
11766 #ifdef UA_ENABLE_TYPENAMES 11767 .memberName =
"maxResponseMessageSize",
11769 .namespaceZero =
true,
11777 #ifdef UA_ENABLE_TYPENAMES 11778 .memberName =
"relativePath",
11780 .namespaceZero =
true,
11785 #ifdef UA_ENABLE_TYPENAMES 11786 .memberName =
"attributeId",
11788 .namespaceZero =
true,
11793 #ifdef UA_ENABLE_TYPENAMES 11794 .memberName =
"indexRange",
11796 .namespaceZero =
true,
11804 #ifdef UA_ENABLE_TYPENAMES 11805 .memberName =
"endpointUrl",
11807 .namespaceZero =
true,
11812 #ifdef UA_ENABLE_TYPENAMES 11813 .memberName =
"server",
11815 .namespaceZero =
true,
11820 #ifdef UA_ENABLE_TYPENAMES 11821 .memberName =
"serverCertificate",
11823 .namespaceZero =
true,
11828 #ifdef UA_ENABLE_TYPENAMES 11829 .memberName =
"securityMode",
11831 .namespaceZero =
true,
11836 #ifdef UA_ENABLE_TYPENAMES 11837 .memberName =
"securityPolicyUri",
11839 .namespaceZero =
true,
11844 #ifdef UA_ENABLE_TYPENAMES 11845 .memberName =
"userIdentityTokens",
11847 .namespaceZero =
true,
11852 #ifdef UA_ENABLE_TYPENAMES 11853 .memberName =
"transportProfileUri",
11855 .namespaceZero =
true,
11860 #ifdef UA_ENABLE_TYPENAMES 11861 .memberName =
"securityLevel",
11863 .namespaceZero =
true,
11871 #ifdef UA_ENABLE_TYPENAMES 11872 .memberName =
"responseHeader",
11874 .namespaceZero =
true,
11879 #ifdef UA_ENABLE_TYPENAMES 11880 .memberName =
"endpoints",
11882 .namespaceZero =
true,
11890 #ifdef UA_ENABLE_TYPENAMES 11891 .memberName =
"typeDefinitionNode",
11893 .namespaceZero =
true,
11898 #ifdef UA_ENABLE_TYPENAMES 11899 .memberName =
"includeSubTypes",
11901 .namespaceZero =
true,
11906 #ifdef UA_ENABLE_TYPENAMES 11907 .memberName =
"dataToReturn",
11909 .namespaceZero =
true,
11917 #ifdef UA_ENABLE_TYPENAMES 11918 .memberName =
"responseHeader",
11920 .namespaceZero =
true,
11925 #ifdef UA_ENABLE_TYPENAMES 11926 .memberName =
"results",
11928 .namespaceZero =
true,
11933 #ifdef UA_ENABLE_TYPENAMES 11934 .memberName =
"diagnosticInfos",
11936 .namespaceZero =
true,
11944 #ifdef UA_ENABLE_TYPENAMES 11945 .memberName =
"requestHeader",
11947 .namespaceZero =
true,
11952 #ifdef UA_ENABLE_TYPENAMES 11953 .memberName =
"browsePaths",
11955 .namespaceZero =
true,
11963 #ifdef UA_ENABLE_TYPENAMES 11964 .memberName =
"responseHeader",
11966 .namespaceZero =
true,
11971 #ifdef UA_ENABLE_TYPENAMES 11972 .memberName =
"results",
11974 .namespaceZero =
true,
11979 #ifdef UA_ENABLE_TYPENAMES 11980 .memberName =
"diagnosticInfos",
11982 .namespaceZero =
true,
11990 #ifdef UA_ENABLE_TYPENAMES 11991 .memberName =
"responseHeader",
11993 .namespaceZero =
true,
11998 #ifdef UA_ENABLE_TYPENAMES 11999 .memberName =
"sessionId",
12001 .namespaceZero =
true,
12006 #ifdef UA_ENABLE_TYPENAMES 12007 .memberName =
"authenticationToken",
12009 .namespaceZero =
true,
12014 #ifdef UA_ENABLE_TYPENAMES 12015 .memberName =
"revisedSessionTimeout",
12017 .namespaceZero =
true,
12022 #ifdef UA_ENABLE_TYPENAMES 12023 .memberName =
"serverNonce",
12025 .namespaceZero =
true,
12030 #ifdef UA_ENABLE_TYPENAMES 12031 .memberName =
"serverCertificate",
12033 .namespaceZero =
true,
12038 #ifdef UA_ENABLE_TYPENAMES 12039 .memberName =
"serverEndpoints",
12041 .namespaceZero =
true,
12046 #ifdef UA_ENABLE_TYPENAMES 12047 .memberName =
"serverSoftwareCertificates",
12049 .namespaceZero =
true,
12054 #ifdef UA_ENABLE_TYPENAMES 12055 .memberName =
"serverSignature",
12057 .namespaceZero =
true,
12062 #ifdef UA_ENABLE_TYPENAMES 12063 .memberName =
"maxRequestMessageSize",
12065 .namespaceZero =
true,
12073 #ifdef UA_ENABLE_TYPENAMES 12074 .memberName =
"requestHeader",
12076 .namespaceZero =
true,
12081 #ifdef UA_ENABLE_TYPENAMES 12082 .memberName =
"view",
12084 .namespaceZero =
true,
12089 #ifdef UA_ENABLE_TYPENAMES 12090 .memberName =
"nodeTypes",
12092 .namespaceZero =
true,
12097 #ifdef UA_ENABLE_TYPENAMES 12098 .memberName =
"filter",
12100 .namespaceZero =
true,
12105 #ifdef UA_ENABLE_TYPENAMES 12106 .memberName =
"maxDataSetsToReturn",
12108 .namespaceZero =
true,
12113 #ifdef UA_ENABLE_TYPENAMES 12114 .memberName =
"maxReferencesToReturn",
12116 .namespaceZero =
true,
12125 #ifdef UA_ENABLE_TYPENAMES 12126 .typeName =
"Boolean",
12131 .overlayable =
true,
12132 .binaryEncodingId = 0,
12134 .members = Boolean_members },
12137 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 2},
12139 #ifdef UA_ENABLE_TYPENAMES 12140 .typeName =
"SByte",
12145 .overlayable =
true,
12146 .binaryEncodingId = 0,
12148 .members = SByte_members },
12151 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 3},
12153 #ifdef UA_ENABLE_TYPENAMES 12154 .typeName =
"Byte",
12159 .overlayable =
true,
12160 .binaryEncodingId = 0,
12162 .members = Byte_members },
12165 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 4},
12167 #ifdef UA_ENABLE_TYPENAMES 12168 .typeName =
"Int16",
12174 .binaryEncodingId = 0,
12176 .members = Int16_members },
12179 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 5},
12181 #ifdef UA_ENABLE_TYPENAMES 12182 .typeName =
"UInt16",
12188 .binaryEncodingId = 0,
12190 .members = UInt16_members },
12193 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12195 #ifdef UA_ENABLE_TYPENAMES 12196 .typeName =
"Int32",
12202 .binaryEncodingId = 0,
12204 .members = Int32_members },
12207 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 7},
12209 #ifdef UA_ENABLE_TYPENAMES 12210 .typeName =
"UInt32",
12216 .binaryEncodingId = 0,
12218 .members = UInt32_members },
12221 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 8},
12223 #ifdef UA_ENABLE_TYPENAMES 12224 .typeName =
"Int64",
12230 .binaryEncodingId = 0,
12232 .members = Int64_members },
12235 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 9},
12237 #ifdef UA_ENABLE_TYPENAMES 12238 .typeName =
"UInt64",
12244 .binaryEncodingId = 0,
12246 .members = UInt64_members },
12249 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 10},
12251 #ifdef UA_ENABLE_TYPENAMES 12252 .typeName =
"Float",
12258 .binaryEncodingId = 0,
12260 .members = Float_members },
12263 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 11},
12265 #ifdef UA_ENABLE_TYPENAMES 12266 .typeName =
"Double",
12272 .binaryEncodingId = 0,
12274 .members = Double_members },
12277 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 12},
12279 #ifdef UA_ENABLE_TYPENAMES 12280 .typeName =
"String",
12284 .fixedSize =
false,
12285 .overlayable =
false,
12286 .binaryEncodingId = 0,
12288 .members = String_members },
12291 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 13},
12293 #ifdef UA_ENABLE_TYPENAMES 12294 .typeName =
"DateTime",
12300 .binaryEncodingId = 0,
12302 .members = DateTime_members },
12305 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 14},
12307 #ifdef UA_ENABLE_TYPENAMES 12308 .typeName =
"Guid",
12314 .binaryEncodingId = 0,
12316 .members = Guid_members },
12319 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 15},
12321 #ifdef UA_ENABLE_TYPENAMES 12322 .typeName =
"ByteString",
12326 .fixedSize =
false,
12327 .overlayable =
false,
12328 .binaryEncodingId = 0,
12330 .members = ByteString_members },
12333 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 16},
12335 #ifdef UA_ENABLE_TYPENAMES 12336 .typeName =
"XmlElement",
12340 .fixedSize =
false,
12341 .overlayable =
false,
12342 .binaryEncodingId = 0,
12344 .members = XmlElement_members },
12347 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 17},
12349 #ifdef UA_ENABLE_TYPENAMES 12350 .typeName =
"NodeId",
12354 .fixedSize =
false,
12355 .overlayable =
false,
12356 .binaryEncodingId = 0,
12358 .members = NodeId_members },
12361 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 18},
12363 #ifdef UA_ENABLE_TYPENAMES 12364 .typeName =
"ExpandedNodeId",
12368 .fixedSize =
false,
12369 .overlayable =
false,
12370 .binaryEncodingId = 0,
12372 .members = ExpandedNodeId_members },
12375 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 19},
12377 #ifdef UA_ENABLE_TYPENAMES 12378 .typeName =
"StatusCode",
12384 .binaryEncodingId = 0,
12386 .members = StatusCode_members },
12389 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 20},
12391 #ifdef UA_ENABLE_TYPENAMES 12392 .typeName =
"QualifiedName",
12396 .fixedSize =
false,
12397 .overlayable =
false,
12398 .binaryEncodingId = 0,
12400 .members = QualifiedName_members },
12403 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 21},
12405 #ifdef UA_ENABLE_TYPENAMES 12406 .typeName =
"LocalizedText",
12410 .fixedSize =
false,
12411 .overlayable =
false,
12412 .binaryEncodingId = 0,
12414 .members = LocalizedText_members },
12417 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 22},
12419 #ifdef UA_ENABLE_TYPENAMES 12420 .typeName =
"ExtensionObject",
12424 .fixedSize =
false,
12425 .overlayable =
false,
12426 .binaryEncodingId = 0,
12428 .members = ExtensionObject_members },
12431 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 23},
12433 #ifdef UA_ENABLE_TYPENAMES 12434 .typeName =
"DataValue",
12438 .fixedSize =
false,
12439 .overlayable =
false,
12440 .binaryEncodingId = 0,
12442 .members = DataValue_members },
12445 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 24},
12447 #ifdef UA_ENABLE_TYPENAMES 12448 .typeName =
"Variant",
12452 .fixedSize =
false,
12453 .overlayable =
false,
12454 .binaryEncodingId = 0,
12456 .members = Variant_members },
12459 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 25},
12461 #ifdef UA_ENABLE_TYPENAMES 12462 .typeName =
"DiagnosticInfo",
12466 .fixedSize =
false,
12467 .overlayable =
false,
12468 .binaryEncodingId = 0,
12470 .members = DiagnosticInfo_members },
12473 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 344},
12475 #ifdef UA_ENABLE_TYPENAMES 12476 .typeName =
"SignedSoftwareCertificate",
12480 .fixedSize =
false,
12481 .overlayable =
false,
12482 .binaryEncodingId = 346,
12484 .members = SignedSoftwareCertificate_members },
12487 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 546},
12489 #ifdef UA_ENABLE_TYPENAMES 12490 .typeName =
"BrowsePathTarget",
12494 .fixedSize =
false,
12495 .overlayable =
false,
12496 .binaryEncodingId = 548,
12498 .members = BrowsePathTarget_members },
12501 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 373},
12503 #ifdef UA_ENABLE_TYPENAMES 12504 .typeName =
"ViewAttributes",
12508 .fixedSize =
false,
12509 .overlayable =
false,
12510 .binaryEncodingId = 375,
12512 .members = ViewAttributes_members },
12515 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12517 #ifdef UA_ENABLE_TYPENAMES 12518 .typeName =
"BrowseResultMask",
12524 .binaryEncodingId = 0,
12526 .members = BrowseResultMask_members },
12529 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 389},
12531 #ifdef UA_ENABLE_TYPENAMES 12532 .typeName =
"RequestHeader",
12536 .fixedSize =
false,
12537 .overlayable =
false,
12538 .binaryEncodingId = 391,
12540 .members = RequestHeader_members },
12543 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 758},
12545 #ifdef UA_ENABLE_TYPENAMES 12546 .typeName =
"MonitoredItemModifyResult",
12550 .fixedSize =
false,
12551 .overlayable =
false,
12552 .binaryEncodingId = 760,
12554 .members = MonitoredItemModifyResult_members },
12557 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 450},
12559 #ifdef UA_ENABLE_TYPENAMES 12560 .typeName =
"CloseSecureChannelRequest",
12564 .fixedSize =
false,
12565 .overlayable =
false,
12566 .binaryEncodingId = 452,
12568 .members = CloseSecureChannelRequest_members },
12571 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 483},
12573 #ifdef UA_ENABLE_TYPENAMES 12574 .typeName =
"AddNodesResult",
12578 .fixedSize =
false,
12579 .overlayable =
false,
12580 .binaryEncodingId = 485,
12582 .members = AddNodesResult_members },
12585 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 355},
12587 #ifdef UA_ENABLE_TYPENAMES 12588 .typeName =
"VariableAttributes",
12592 .fixedSize =
false,
12593 .overlayable =
false,
12594 .binaryEncodingId = 357,
12596 .members = VariableAttributes_members },
12599 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 803},
12601 #ifdef UA_ENABLE_TYPENAMES 12602 .typeName =
"NotificationMessage",
12606 .fixedSize =
false,
12607 .overlayable =
false,
12608 .binaryEncodingId = 805,
12610 .members = NotificationMessage_members },
12613 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12615 #ifdef UA_ENABLE_TYPENAMES 12616 .typeName =
"NodeAttributesMask",
12622 .binaryEncodingId = 0,
12624 .members = NodeAttributesMask_members },
12627 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12629 #ifdef UA_ENABLE_TYPENAMES 12630 .typeName =
"MonitoringMode",
12636 .binaryEncodingId = 0,
12638 .members = MonitoringMode_members },
12641 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 707},
12643 #ifdef UA_ENABLE_TYPENAMES 12644 .typeName =
"CallMethodResult",
12648 .fixedSize =
false,
12649 .overlayable =
false,
12650 .binaryEncodingId = 709,
12652 .members = CallMethodResult_members },
12655 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 610},
12657 #ifdef UA_ENABLE_TYPENAMES 12658 .typeName =
"ParsingResult",
12662 .fixedSize =
false,
12663 .overlayable =
false,
12664 .binaryEncodingId = 612,
12666 .members = ParsingResult_members },
12669 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 537},
12671 #ifdef UA_ENABLE_TYPENAMES 12672 .typeName =
"RelativePathElement",
12676 .fixedSize =
false,
12677 .overlayable =
false,
12678 .binaryEncodingId = 539,
12680 .members = RelativePathElement_members },
12683 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12685 #ifdef UA_ENABLE_TYPENAMES 12686 .typeName =
"BrowseDirection",
12692 .binaryEncodingId = 0,
12694 .members = BrowseDirection_members },
12697 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 704},
12699 #ifdef UA_ENABLE_TYPENAMES 12700 .typeName =
"CallMethodRequest",
12704 .fixedSize =
false,
12705 .overlayable =
false,
12706 .binaryEncodingId = 706,
12708 .members = CallMethodRequest_members },
12711 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 564},
12713 #ifdef UA_ENABLE_TYPENAMES 12714 .typeName =
"UnregisterNodesRequest",
12718 .fixedSize =
false,
12719 .overlayable =
false,
12720 .binaryEncodingId = 566,
12722 .members = UnregisterNodesRequest_members },
12725 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 604},
12727 #ifdef UA_ENABLE_TYPENAMES 12728 .typeName =
"ContentFilterElementResult",
12732 .fixedSize =
false,
12733 .overlayable =
false,
12734 .binaryEncodingId = 606,
12736 .members = ContentFilterElementResult_members },
12739 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 577},
12741 #ifdef UA_ENABLE_TYPENAMES 12742 .typeName =
"QueryDataSet",
12746 .fixedSize =
false,
12747 .overlayable =
false,
12748 .binaryEncodingId = 579,
12750 .members = QueryDataSet_members },
12753 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 319},
12755 #ifdef UA_ENABLE_TYPENAMES 12756 .typeName =
"AnonymousIdentityToken",
12760 .fixedSize =
false,
12761 .overlayable =
false,
12762 .binaryEncodingId = 321,
12764 .members = AnonymousIdentityToken_members },
12767 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 797},
12769 #ifdef UA_ENABLE_TYPENAMES 12770 .typeName =
"SetPublishingModeRequest",
12774 .fixedSize =
false,
12775 .overlayable =
false,
12776 .binaryEncodingId = 799,
12778 .members = SetPublishingModeRequest_members },
12781 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12783 #ifdef UA_ENABLE_TYPENAMES 12784 .typeName =
"TimestampsToReturn",
12790 .binaryEncodingId = 0,
12792 .members = TimestampsToReturn_members },
12795 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 710},
12797 #ifdef UA_ENABLE_TYPENAMES 12798 .typeName =
"CallRequest",
12802 .fixedSize =
false,
12803 .overlayable =
false,
12804 .binaryEncodingId = 712,
12806 .members = CallRequest_members },
12809 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 358},
12811 #ifdef UA_ENABLE_TYPENAMES 12812 .typeName =
"MethodAttributes",
12816 .fixedSize =
false,
12817 .overlayable =
false,
12818 .binaryEncodingId = 360,
12820 .members = MethodAttributes_members },
12823 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 385},
12825 #ifdef UA_ENABLE_TYPENAMES 12826 .typeName =
"DeleteReferencesItem",
12830 .fixedSize =
false,
12831 .overlayable =
false,
12832 .binaryEncodingId = 387,
12834 .members = DeleteReferencesItem_members },
12837 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 668},
12839 #ifdef UA_ENABLE_TYPENAMES 12840 .typeName =
"WriteValue",
12844 .fixedSize =
false,
12845 .overlayable =
false,
12846 .binaryEncodingId = 670,
12848 .members = WriteValue_members },
12851 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 746},
12853 #ifdef UA_ENABLE_TYPENAMES 12854 .typeName =
"MonitoredItemCreateResult",
12858 .fixedSize =
false,
12859 .overlayable =
false,
12860 .binaryEncodingId = 748,
12862 .members = MonitoredItemCreateResult_members },
12865 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12867 #ifdef UA_ENABLE_TYPENAMES 12868 .typeName =
"MessageSecurityMode",
12874 .binaryEncodingId = 0,
12876 .members = MessageSecurityMode_members },
12879 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 740},
12881 #ifdef UA_ENABLE_TYPENAMES 12882 .typeName =
"MonitoringParameters",
12886 .fixedSize =
false,
12887 .overlayable =
false,
12888 .binaryEncodingId = 742,
12890 .members = MonitoringParameters_members },
12893 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 456},
12895 #ifdef UA_ENABLE_TYPENAMES 12896 .typeName =
"SignatureData",
12900 .fixedSize =
false,
12901 .overlayable =
false,
12902 .binaryEncodingId = 458,
12904 .members = SignatureData_members },
12907 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 285},
12909 #ifdef UA_ENABLE_TYPENAMES 12910 .typeName =
"ReferenceNode",
12914 .fixedSize =
false,
12915 .overlayable =
false,
12916 .binaryEncodingId = 287,
12918 .members = ReferenceNode_members },
12921 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 296},
12923 #ifdef UA_ENABLE_TYPENAMES 12924 .typeName =
"Argument",
12928 .fixedSize =
false,
12929 .overlayable =
false,
12930 .binaryEncodingId = 298,
12932 .members = Argument_members },
12935 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 316},
12937 #ifdef UA_ENABLE_TYPENAMES 12938 .typeName =
"UserIdentityToken",
12942 .fixedSize =
false,
12943 .overlayable =
false,
12944 .binaryEncodingId = 318,
12946 .members = UserIdentityToken_members },
12949 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 361},
12951 #ifdef UA_ENABLE_TYPENAMES 12952 .typeName =
"ObjectTypeAttributes",
12956 .fixedSize =
false,
12957 .overlayable =
false,
12958 .binaryEncodingId = 363,
12960 .members = ObjectTypeAttributes_members },
12963 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12965 #ifdef UA_ENABLE_TYPENAMES 12966 .typeName =
"DeadbandType",
12972 .binaryEncodingId = 0,
12974 .members = DeadbandType_members },
12977 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12979 #ifdef UA_ENABLE_TYPENAMES 12980 .typeName =
"SecurityTokenRequestType",
12986 .binaryEncodingId = 0,
12988 .members = SecurityTokenRequestType_members },
12991 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
12993 #ifdef UA_ENABLE_TYPENAMES 12994 .typeName =
"DataChangeTrigger",
13000 .binaryEncodingId = 0,
13002 .members = DataChangeTrigger_members },
13005 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 338},
13007 #ifdef UA_ENABLE_TYPENAMES 13008 .typeName =
"BuildInfo",
13012 .fixedSize =
false,
13013 .overlayable =
false,
13014 .binaryEncodingId = 340,
13016 .members = BuildInfo_members },
13019 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13021 #ifdef UA_ENABLE_TYPENAMES 13022 .typeName =
"NodeClass",
13028 .binaryEncodingId = 0,
13030 .members = NodeClass_members },
13033 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 441},
13035 #ifdef UA_ENABLE_TYPENAMES 13036 .typeName =
"ChannelSecurityToken",
13042 .binaryEncodingId = 443,
13044 .members = ChannelSecurityToken_members },
13047 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 806},
13049 #ifdef UA_ENABLE_TYPENAMES 13050 .typeName =
"MonitoredItemNotification",
13054 .fixedSize =
false,
13055 .overlayable =
false,
13056 .binaryEncodingId = 808,
13058 .members = MonitoredItemNotification_members },
13061 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 382},
13063 #ifdef UA_ENABLE_TYPENAMES 13064 .typeName =
"DeleteNodesItem",
13068 .fixedSize =
false,
13069 .overlayable =
false,
13070 .binaryEncodingId = 384,
13072 .members = DeleteNodesItem_members },
13075 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 821},
13077 #ifdef UA_ENABLE_TYPENAMES 13078 .typeName =
"SubscriptionAcknowledgement",
13084 .binaryEncodingId = 823,
13086 .members = SubscriptionAcknowledgement_members },
13089 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 626},
13091 #ifdef UA_ENABLE_TYPENAMES 13092 .typeName =
"ReadValueId",
13096 .fixedSize =
false,
13097 .overlayable =
false,
13098 .binaryEncodingId = 628,
13100 .members = ReadValueId_members },
13103 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 370},
13105 #ifdef UA_ENABLE_TYPENAMES 13106 .typeName =
"DataTypeAttributes",
13110 .fixedSize =
false,
13111 .overlayable =
false,
13112 .binaryEncodingId = 372,
13114 .members = DataTypeAttributes_members },
13117 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 392},
13119 #ifdef UA_ENABLE_TYPENAMES 13120 .typeName =
"ResponseHeader",
13124 .fixedSize =
false,
13125 .overlayable =
false,
13126 .binaryEncodingId = 394,
13128 .members = ResponseHeader_members },
13131 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 845},
13133 #ifdef UA_ENABLE_TYPENAMES 13134 .typeName =
"DeleteSubscriptionsRequest",
13138 .fixedSize =
false,
13139 .overlayable =
false,
13140 .binaryEncodingId = 847,
13142 .members = DeleteSubscriptionsRequest_members },
13145 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 511},
13147 #ifdef UA_ENABLE_TYPENAMES 13148 .typeName =
"ViewDescription",
13152 .fixedSize =
false,
13153 .overlayable =
false,
13154 .binaryEncodingId = 513,
13156 .members = ViewDescription_members },
13159 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 782},
13161 #ifdef UA_ENABLE_TYPENAMES 13162 .typeName =
"DeleteMonitoredItemsResponse",
13166 .fixedSize =
false,
13167 .overlayable =
false,
13168 .binaryEncodingId = 784,
13170 .members = DeleteMonitoredItemsResponse_members },
13173 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 349},
13175 #ifdef UA_ENABLE_TYPENAMES 13176 .typeName =
"NodeAttributes",
13180 .fixedSize =
false,
13181 .overlayable =
false,
13182 .binaryEncodingId = 351,
13184 .members = NodeAttributes_members },
13187 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 558},
13189 #ifdef UA_ENABLE_TYPENAMES 13190 .typeName =
"RegisterNodesRequest",
13194 .fixedSize =
false,
13195 .overlayable =
false,
13196 .binaryEncodingId = 560,
13198 .members = RegisterNodesRequest_members },
13201 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 498},
13203 #ifdef UA_ENABLE_TYPENAMES 13204 .typeName =
"DeleteNodesRequest",
13208 .fixedSize =
false,
13209 .overlayable =
false,
13210 .binaryEncodingId = 500,
13212 .members = DeleteNodesRequest_members },
13215 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 827},
13217 #ifdef UA_ENABLE_TYPENAMES 13218 .typeName =
"PublishResponse",
13222 .fixedSize =
false,
13223 .overlayable =
false,
13224 .binaryEncodingId = 829,
13226 .members = PublishResponse_members },
13229 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 755},
13231 #ifdef UA_ENABLE_TYPENAMES 13232 .typeName =
"MonitoredItemModifyRequest",
13236 .fixedSize =
false,
13237 .overlayable =
false,
13238 .binaryEncodingId = 757,
13240 .members = MonitoredItemModifyRequest_members },
13243 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 322},
13245 #ifdef UA_ENABLE_TYPENAMES 13246 .typeName =
"UserNameIdentityToken",
13250 .fixedSize =
false,
13251 .overlayable =
false,
13252 .binaryEncodingId = 324,
13254 .members = UserNameIdentityToken_members },
13257 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13259 #ifdef UA_ENABLE_TYPENAMES 13260 .typeName =
"IdType",
13266 .binaryEncodingId = 0,
13268 .members = IdType_members },
13271 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13273 #ifdef UA_ENABLE_TYPENAMES 13274 .typeName =
"UserTokenType",
13280 .binaryEncodingId = 0,
13282 .members = UserTokenType_members },
13285 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 465},
13287 #ifdef UA_ENABLE_TYPENAMES 13288 .typeName =
"ActivateSessionRequest",
13292 .fixedSize =
false,
13293 .overlayable =
false,
13294 .binaryEncodingId = 467,
13296 .members = ActivateSessionRequest_members },
13299 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 447},
13301 #ifdef UA_ENABLE_TYPENAMES 13302 .typeName =
"OpenSecureChannelResponse",
13306 .fixedSize =
false,
13307 .overlayable =
false,
13308 .binaryEncodingId = 449,
13310 .members = OpenSecureChannelResponse_members },
13313 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13315 #ifdef UA_ENABLE_TYPENAMES 13316 .typeName =
"ApplicationType",
13322 .binaryEncodingId = 0,
13324 .members = ApplicationType_members },
13327 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13329 #ifdef UA_ENABLE_TYPENAMES 13330 .typeName =
"ServerState",
13336 .binaryEncodingId = 0,
13338 .members = ServerState_members },
13341 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 622},
13343 #ifdef UA_ENABLE_TYPENAMES 13344 .typeName =
"QueryNextResponse",
13348 .fixedSize =
false,
13349 .overlayable =
false,
13350 .binaryEncodingId = 624,
13352 .members = QueryNextResponse_members },
13355 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 468},
13357 #ifdef UA_ENABLE_TYPENAMES 13358 .typeName =
"ActivateSessionResponse",
13362 .fixedSize =
false,
13363 .overlayable =
false,
13364 .binaryEncodingId = 470,
13366 .members = ActivateSessionResponse_members },
13369 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 6},
13371 #ifdef UA_ENABLE_TYPENAMES 13372 .typeName =
"FilterOperator",
13378 .binaryEncodingId = 0,
13380 .members = FilterOperator_members },
13383 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 619},
13385 #ifdef UA_ENABLE_TYPENAMES 13386 .typeName =
"QueryNextRequest",
13390 .fixedSize =
false,
13391 .overlayable =
false,
13392 .binaryEncodingId = 621,
13394 .members = QueryNextRequest_members },
13397 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 674},
13399 #ifdef UA_ENABLE_TYPENAMES 13400 .typeName =
"WriteResponse",
13404 .fixedSize =
false,
13405 .overlayable =
false,
13406 .binaryEncodingId = 676,
13408 .members = WriteResponse_members },
13411 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 531},
13413 #ifdef UA_ENABLE_TYPENAMES 13414 .typeName =
"BrowseNextRequest",
13418 .fixedSize =
false,
13419 .overlayable =
false,
13420 .binaryEncodingId = 533,
13422 .members = BrowseNextRequest_members },
13425 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 785},
13427 #ifdef UA_ENABLE_TYPENAMES 13428 .typeName =
"CreateSubscriptionRequest",
13432 .fixedSize =
false,
13433 .overlayable =
false,
13434 .binaryEncodingId = 787,
13436 .members = CreateSubscriptionRequest_members },
13439 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 364},
13441 #ifdef UA_ENABLE_TYPENAMES 13442 .typeName =
"VariableTypeAttributes",
13446 .fixedSize =
false,
13447 .overlayable =
false,
13448 .binaryEncodingId = 366,
13450 .members = VariableTypeAttributes_members },
13453 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 549},
13455 #ifdef UA_ENABLE_TYPENAMES 13456 .typeName =
"BrowsePathResult",
13460 .fixedSize =
false,
13461 .overlayable =
false,
13462 .binaryEncodingId = 551,
13464 .members = BrowsePathResult_members },
13467 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 794},
13469 #ifdef UA_ENABLE_TYPENAMES 13470 .typeName =
"ModifySubscriptionResponse",
13474 .fixedSize =
false,
13475 .overlayable =
false,
13476 .binaryEncodingId = 796,
13478 .members = ModifySubscriptionResponse_members },
13481 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 444},
13483 #ifdef UA_ENABLE_TYPENAMES 13484 .typeName =
"OpenSecureChannelRequest",
13488 .fixedSize =
false,
13489 .overlayable =
false,
13490 .binaryEncodingId = 446,
13492 .members = OpenSecureChannelRequest_members },
13495 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 561},
13497 #ifdef UA_ENABLE_TYPENAMES 13498 .typeName =
"RegisterNodesResponse",
13502 .fixedSize =
false,
13503 .overlayable =
false,
13504 .binaryEncodingId = 563,
13506 .members = RegisterNodesResponse_members },
13509 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 471},
13511 #ifdef UA_ENABLE_TYPENAMES 13512 .typeName =
"CloseSessionRequest",
13516 .fixedSize =
false,
13517 .overlayable =
false,
13518 .binaryEncodingId = 473,
13520 .members = CloseSessionRequest_members },
13523 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 791},
13525 #ifdef UA_ENABLE_TYPENAMES 13526 .typeName =
"ModifySubscriptionRequest",
13530 .fixedSize =
false,
13531 .overlayable =
false,
13532 .binaryEncodingId = 793,
13534 .members = ModifySubscriptionRequest_members },
13537 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 304},
13539 #ifdef UA_ENABLE_TYPENAMES 13540 .typeName =
"UserTokenPolicy",
13544 .fixedSize =
false,
13545 .overlayable =
false,
13546 .binaryEncodingId = 306,
13548 .members = UserTokenPolicy_members },
13551 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 779},
13553 #ifdef UA_ENABLE_TYPENAMES 13554 .typeName =
"DeleteMonitoredItemsRequest",
13558 .fixedSize =
false,
13559 .overlayable =
false,
13560 .binaryEncodingId = 781,
13562 .members = DeleteMonitoredItemsRequest_members },
13565 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 367},
13567 #ifdef UA_ENABLE_TYPENAMES 13568 .typeName =
"ReferenceTypeAttributes",
13572 .fixedSize =
false,
13573 .overlayable =
false,
13574 .binaryEncodingId = 369,
13576 .members = ReferenceTypeAttributes_members },
13579 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 767},
13581 #ifdef UA_ENABLE_TYPENAMES 13582 .typeName =
"SetMonitoringModeRequest",
13586 .fixedSize =
false,
13587 .overlayable =
false,
13588 .binaryEncodingId = 769,
13590 .members = SetMonitoringModeRequest_members },
13593 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 567},
13595 #ifdef UA_ENABLE_TYPENAMES 13596 .typeName =
"UnregisterNodesResponse",
13600 .fixedSize =
false,
13601 .overlayable =
false,
13602 .binaryEncodingId = 569,
13604 .members = UnregisterNodesResponse_members },
13607 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 671},
13609 #ifdef UA_ENABLE_TYPENAMES 13610 .typeName =
"WriteRequest",
13614 .fixedSize =
false,
13615 .overlayable =
false,
13616 .binaryEncodingId = 673,
13618 .members = WriteRequest_members },
13621 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 352},
13623 #ifdef UA_ENABLE_TYPENAMES 13624 .typeName =
"ObjectAttributes",
13628 .fixedSize =
false,
13629 .overlayable =
false,
13630 .binaryEncodingId = 354,
13632 .members = ObjectAttributes_members },
13635 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 514},
13637 #ifdef UA_ENABLE_TYPENAMES 13638 .typeName =
"BrowseDescription",
13642 .fixedSize =
false,
13643 .overlayable =
false,
13644 .binaryEncodingId = 516,
13646 .members = BrowseDescription_members },
13649 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 830},
13651 #ifdef UA_ENABLE_TYPENAMES 13652 .typeName =
"RepublishRequest",
13656 .fixedSize =
false,
13657 .overlayable =
false,
13658 .binaryEncodingId = 832,
13660 .members = RepublishRequest_members },
13663 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 426},
13665 #ifdef UA_ENABLE_TYPENAMES 13666 .typeName =
"GetEndpointsRequest",
13670 .fixedSize =
false,
13671 .overlayable =
false,
13672 .binaryEncodingId = 428,
13674 .members = GetEndpointsRequest_members },
13677 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 824},
13679 #ifdef UA_ENABLE_TYPENAMES 13680 .typeName =
"PublishRequest",
13684 .fixedSize =
false,
13685 .overlayable =
false,
13686 .binaryEncodingId = 826,
13688 .members = PublishRequest_members },
13691 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 489},
13693 #ifdef UA_ENABLE_TYPENAMES 13694 .typeName =
"AddNodesResponse",
13698 .fixedSize =
false,
13699 .overlayable =
false,
13700 .binaryEncodingId = 491,
13702 .members = AddNodesResponse_members },
13705 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 809},
13707 #ifdef UA_ENABLE_TYPENAMES 13708 .typeName =
"DataChangeNotification",
13712 .fixedSize =
false,
13713 .overlayable =
false,
13714 .binaryEncodingId = 811,
13716 .members = DataChangeNotification_members },
13719 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 453},
13721 #ifdef UA_ENABLE_TYPENAMES 13722 .typeName =
"CloseSecureChannelResponse",
13726 .fixedSize =
false,
13727 .overlayable =
false,
13728 .binaryEncodingId = 455,
13730 .members = CloseSecureChannelResponse_members },
13733 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 761},
13735 #ifdef UA_ENABLE_TYPENAMES 13736 .typeName =
"ModifyMonitoredItemsRequest",
13740 .fixedSize =
false,
13741 .overlayable =
false,
13742 .binaryEncodingId = 763,
13744 .members = ModifyMonitoredItemsRequest_members },
13747 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 770},
13749 #ifdef UA_ENABLE_TYPENAMES 13750 .typeName =
"SetMonitoringModeResponse",
13754 .fixedSize =
false,
13755 .overlayable =
false,
13756 .binaryEncodingId = 772,
13758 .members = SetMonitoringModeResponse_members },
13761 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 420},
13763 #ifdef UA_ENABLE_TYPENAMES 13764 .typeName =
"FindServersRequest",
13768 .fixedSize =
false,
13769 .overlayable =
false,
13770 .binaryEncodingId = 422,
13772 .members = FindServersRequest_members },
13775 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 518},
13777 #ifdef UA_ENABLE_TYPENAMES 13778 .typeName =
"ReferenceDescription",
13782 .fixedSize =
false,
13783 .overlayable =
false,
13784 .binaryEncodingId = 520,
13786 .members = ReferenceDescription_members },
13789 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 800},
13791 #ifdef UA_ENABLE_TYPENAMES 13792 .typeName =
"SetPublishingModeResponse",
13796 .fixedSize =
false,
13797 .overlayable =
false,
13798 .binaryEncodingId = 802,
13800 .members = SetPublishingModeResponse_members },
13803 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 607},
13805 #ifdef UA_ENABLE_TYPENAMES 13806 .typeName =
"ContentFilterResult",
13810 .fixedSize =
false,
13811 .overlayable =
false,
13812 .binaryEncodingId = 609,
13814 .members = ContentFilterResult_members },
13817 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 379},
13819 #ifdef UA_ENABLE_TYPENAMES 13820 .typeName =
"AddReferencesItem",
13824 .fixedSize =
false,
13825 .overlayable =
false,
13826 .binaryEncodingId = 381,
13828 .members = AddReferencesItem_members },
13831 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 788},
13833 #ifdef UA_ENABLE_TYPENAMES 13834 .typeName =
"CreateSubscriptionResponse",
13838 .fixedSize =
false,
13839 .overlayable =
false,
13840 .binaryEncodingId = 790,
13842 .members = CreateSubscriptionResponse_members },
13845 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 848},
13847 #ifdef UA_ENABLE_TYPENAMES 13848 .typeName =
"DeleteSubscriptionsResponse",
13852 .fixedSize =
false,
13853 .overlayable =
false,
13854 .binaryEncodingId = 850,
13856 .members = DeleteSubscriptionsResponse_members },
13859 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 540},
13861 #ifdef UA_ENABLE_TYPENAMES 13862 .typeName =
"RelativePath",
13866 .fixedSize =
false,
13867 .overlayable =
false,
13868 .binaryEncodingId = 542,
13870 .members = RelativePath_members },
13873 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 507},
13875 #ifdef UA_ENABLE_TYPENAMES 13876 .typeName =
"DeleteReferencesResponse",
13880 .fixedSize =
false,
13881 .overlayable =
false,
13882 .binaryEncodingId = 509,
13884 .members = DeleteReferencesResponse_members },
13887 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 752},
13889 #ifdef UA_ENABLE_TYPENAMES 13890 .typeName =
"CreateMonitoredItemsResponse",
13894 .fixedSize =
false,
13895 .overlayable =
false,
13896 .binaryEncodingId = 754,
13898 .members = CreateMonitoredItemsResponse_members },
13901 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 713},
13903 #ifdef UA_ENABLE_TYPENAMES 13904 .typeName =
"CallResponse",
13908 .fixedSize =
false,
13909 .overlayable =
false,
13910 .binaryEncodingId = 715,
13912 .members = CallResponse_members },
13915 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 501},
13917 #ifdef UA_ENABLE_TYPENAMES 13918 .typeName =
"DeleteNodesResponse",
13922 .fixedSize =
false,
13923 .overlayable =
false,
13924 .binaryEncodingId = 503,
13926 .members = DeleteNodesResponse_members },
13929 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 833},
13931 #ifdef UA_ENABLE_TYPENAMES 13932 .typeName =
"RepublishResponse",
13936 .fixedSize =
false,
13937 .overlayable =
false,
13938 .binaryEncodingId = 835,
13940 .members = RepublishResponse_members },
13943 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 743},
13945 #ifdef UA_ENABLE_TYPENAMES 13946 .typeName =
"MonitoredItemCreateRequest",
13950 .fixedSize =
false,
13951 .overlayable =
false,
13952 .binaryEncodingId = 745,
13954 .members = MonitoredItemCreateRequest_members },
13957 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 504},
13959 #ifdef UA_ENABLE_TYPENAMES 13960 .typeName =
"DeleteReferencesRequest",
13964 .fixedSize =
false,
13965 .overlayable =
false,
13966 .binaryEncodingId = 506,
13968 .members = DeleteReferencesRequest_members },
13971 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 764},
13973 #ifdef UA_ENABLE_TYPENAMES 13974 .typeName =
"ModifyMonitoredItemsResponse",
13978 .fixedSize =
false,
13979 .overlayable =
false,
13980 .binaryEncodingId = 766,
13982 .members = ModifyMonitoredItemsResponse_members },
13985 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 632},
13987 #ifdef UA_ENABLE_TYPENAMES 13988 .typeName =
"ReadResponse",
13992 .fixedSize =
false,
13993 .overlayable =
false,
13994 .binaryEncodingId = 634,
13996 .members = ReadResponse_members },
13999 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 492},
14001 #ifdef UA_ENABLE_TYPENAMES 14002 .typeName =
"AddReferencesRequest",
14006 .fixedSize =
false,
14007 .overlayable =
false,
14008 .binaryEncodingId = 494,
14010 .members = AddReferencesRequest_members },
14013 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 629},
14015 #ifdef UA_ENABLE_TYPENAMES 14016 .typeName =
"ReadRequest",
14020 .fixedSize =
false,
14021 .overlayable =
false,
14022 .binaryEncodingId = 631,
14024 .members = ReadRequest_members },
14027 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 376},
14029 #ifdef UA_ENABLE_TYPENAMES 14030 .typeName =
"AddNodesItem",
14034 .fixedSize =
false,
14035 .overlayable =
false,
14036 .binaryEncodingId = 378,
14038 .members = AddNodesItem_members },
14041 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 862},
14043 #ifdef UA_ENABLE_TYPENAMES 14044 .typeName =
"ServerStatusDataType",
14048 .fixedSize =
false,
14049 .overlayable =
false,
14050 .binaryEncodingId = 864,
14052 .members = ServerStatusDataType_members },
14055 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 495},
14057 #ifdef UA_ENABLE_TYPENAMES 14058 .typeName =
"AddReferencesResponse",
14062 .fixedSize =
false,
14063 .overlayable =
false,
14064 .binaryEncodingId = 497,
14066 .members = AddReferencesResponse_members },
14069 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 555},
14071 #ifdef UA_ENABLE_TYPENAMES 14072 .typeName =
"TranslateBrowsePathsToNodeIdsResponse",
14076 .fixedSize =
false,
14077 .overlayable =
false,
14078 .binaryEncodingId = 557,
14080 .members = TranslateBrowsePathsToNodeIdsResponse_members },
14083 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 722},
14085 #ifdef UA_ENABLE_TYPENAMES 14086 .typeName =
"DataChangeFilter",
14092 .binaryEncodingId = 724,
14094 .members = DataChangeFilter_members },
14097 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 583},
14099 #ifdef UA_ENABLE_TYPENAMES 14100 .typeName =
"ContentFilterElement",
14104 .fixedSize =
false,
14105 .overlayable =
false,
14106 .binaryEncodingId = 585,
14108 .members = ContentFilterElement_members },
14111 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 474},
14113 #ifdef UA_ENABLE_TYPENAMES 14114 .typeName =
"CloseSessionResponse",
14118 .fixedSize =
false,
14119 .overlayable =
false,
14120 .binaryEncodingId = 476,
14122 .members = CloseSessionResponse_members },
14125 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 308},
14127 #ifdef UA_ENABLE_TYPENAMES 14128 .typeName =
"ApplicationDescription",
14132 .fixedSize =
false,
14133 .overlayable =
false,
14134 .binaryEncodingId = 310,
14136 .members = ApplicationDescription_members },
14139 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 395},
14141 #ifdef UA_ENABLE_TYPENAMES 14142 .typeName =
"ServiceFault",
14146 .fixedSize =
false,
14147 .overlayable =
false,
14148 .binaryEncodingId = 397,
14150 .members = ServiceFault_members },
14153 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 423},
14155 #ifdef UA_ENABLE_TYPENAMES 14156 .typeName =
"FindServersResponse",
14160 .fixedSize =
false,
14161 .overlayable =
false,
14162 .binaryEncodingId = 425,
14164 .members = FindServersResponse_members },
14167 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 749},
14169 #ifdef UA_ENABLE_TYPENAMES 14170 .typeName =
"CreateMonitoredItemsRequest",
14174 .fixedSize =
false,
14175 .overlayable =
false,
14176 .binaryEncodingId = 751,
14178 .members = CreateMonitoredItemsRequest_members },
14181 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 586},
14183 #ifdef UA_ENABLE_TYPENAMES 14184 .typeName =
"ContentFilter",
14188 .fixedSize =
false,
14189 .overlayable =
false,
14190 .binaryEncodingId = 588,
14192 .members = ContentFilter_members },
14195 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 616},
14197 #ifdef UA_ENABLE_TYPENAMES 14198 .typeName =
"QueryFirstResponse",
14202 .fixedSize =
false,
14203 .overlayable =
false,
14204 .binaryEncodingId = 618,
14206 .members = QueryFirstResponse_members },
14209 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 486},
14211 #ifdef UA_ENABLE_TYPENAMES 14212 .typeName =
"AddNodesRequest",
14216 .fixedSize =
false,
14217 .overlayable =
false,
14218 .binaryEncodingId = 488,
14220 .members = AddNodesRequest_members },
14223 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 525},
14225 #ifdef UA_ENABLE_TYPENAMES 14226 .typeName =
"BrowseRequest",
14230 .fixedSize =
false,
14231 .overlayable =
false,
14232 .binaryEncodingId = 527,
14234 .members = BrowseRequest_members },
14237 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 543},
14239 #ifdef UA_ENABLE_TYPENAMES 14240 .typeName =
"BrowsePath",
14244 .fixedSize =
false,
14245 .overlayable =
false,
14246 .binaryEncodingId = 545,
14248 .members = BrowsePath_members },
14251 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 522},
14253 #ifdef UA_ENABLE_TYPENAMES 14254 .typeName =
"BrowseResult",
14258 .fixedSize =
false,
14259 .overlayable =
false,
14260 .binaryEncodingId = 524,
14262 .members = BrowseResult_members },
14265 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 459},
14267 #ifdef UA_ENABLE_TYPENAMES 14268 .typeName =
"CreateSessionRequest",
14272 .fixedSize =
false,
14273 .overlayable =
false,
14274 .binaryEncodingId = 461,
14276 .members = CreateSessionRequest_members },
14279 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 570},
14281 #ifdef UA_ENABLE_TYPENAMES 14282 .typeName =
"QueryDataDescription",
14286 .fixedSize =
false,
14287 .overlayable =
false,
14288 .binaryEncodingId = 572,
14290 .members = QueryDataDescription_members },
14293 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 312},
14295 #ifdef UA_ENABLE_TYPENAMES 14296 .typeName =
"EndpointDescription",
14300 .fixedSize =
false,
14301 .overlayable =
false,
14302 .binaryEncodingId = 314,
14304 .members = EndpointDescription_members },
14307 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 429},
14309 #ifdef UA_ENABLE_TYPENAMES 14310 .typeName =
"GetEndpointsResponse",
14314 .fixedSize =
false,
14315 .overlayable =
false,
14316 .binaryEncodingId = 431,
14318 .members = GetEndpointsResponse_members },
14321 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 573},
14323 #ifdef UA_ENABLE_TYPENAMES 14324 .typeName =
"NodeTypeDescription",
14328 .fixedSize =
false,
14329 .overlayable =
false,
14330 .binaryEncodingId = 575,
14332 .members = NodeTypeDescription_members },
14335 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 534},
14337 #ifdef UA_ENABLE_TYPENAMES 14338 .typeName =
"BrowseNextResponse",
14342 .fixedSize =
false,
14343 .overlayable =
false,
14344 .binaryEncodingId = 536,
14346 .members = BrowseNextResponse_members },
14349 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 552},
14351 #ifdef UA_ENABLE_TYPENAMES 14352 .typeName =
"TranslateBrowsePathsToNodeIdsRequest",
14356 .fixedSize =
false,
14357 .overlayable =
false,
14358 .binaryEncodingId = 554,
14360 .members = TranslateBrowsePathsToNodeIdsRequest_members },
14363 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 528},
14365 #ifdef UA_ENABLE_TYPENAMES 14366 .typeName =
"BrowseResponse",
14370 .fixedSize =
false,
14371 .overlayable =
false,
14372 .binaryEncodingId = 530,
14374 .members = BrowseResponse_members },
14377 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 462},
14379 #ifdef UA_ENABLE_TYPENAMES 14380 .typeName =
"CreateSessionResponse",
14384 .fixedSize =
false,
14385 .overlayable =
false,
14386 .binaryEncodingId = 464,
14388 .members = CreateSessionResponse_members },
14391 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 613},
14393 #ifdef UA_ENABLE_TYPENAMES 14394 .typeName =
"QueryFirstRequest",
14398 .fixedSize =
false,
14399 .overlayable =
false,
14400 .binaryEncodingId = 615,
14402 .members = QueryFirstRequest_members },
14415 #ifdef UA_ENABLE_TYPENAMES 14416 .memberName =
"error",
14418 .namespaceZero =
true,
14423 #ifdef UA_ENABLE_TYPENAMES 14424 .memberName =
"reason",
14426 .namespaceZero =
true,
14434 #ifdef UA_ENABLE_TYPENAMES 14435 .memberName =
"padding",
14437 .namespaceZero =
true,
14442 #ifdef UA_ENABLE_TYPENAMES 14443 .memberName =
"signature",
14445 .namespaceZero =
true,
14453 #ifdef UA_ENABLE_TYPENAMES 14454 .memberName =
"protocolVersion",
14456 .namespaceZero =
true,
14461 #ifdef UA_ENABLE_TYPENAMES 14462 .memberName =
"receiveBufferSize",
14464 .namespaceZero =
true,
14469 #ifdef UA_ENABLE_TYPENAMES 14470 .memberName =
"sendBufferSize",
14472 .namespaceZero =
true,
14477 #ifdef UA_ENABLE_TYPENAMES 14478 .memberName =
"maxMessageSize",
14480 .namespaceZero =
true,
14485 #ifdef UA_ENABLE_TYPENAMES 14486 .memberName =
"maxChunkCount",
14488 .namespaceZero =
true,
14493 #ifdef UA_ENABLE_TYPENAMES 14494 .memberName =
"endpointUrl",
14496 .namespaceZero =
true,
14504 #ifdef UA_ENABLE_TYPENAMES 14505 .memberName =
"error",
14507 .namespaceZero =
true,
14512 #ifdef UA_ENABLE_TYPENAMES 14513 .memberName =
"reason",
14515 .namespaceZero =
true,
14523 #ifdef UA_ENABLE_TYPENAMES 14526 .namespaceZero =
true,
14534 #ifdef UA_ENABLE_TYPENAMES 14535 .memberName =
"securityPolicyUri",
14537 .namespaceZero =
true,
14542 #ifdef UA_ENABLE_TYPENAMES 14543 .memberName =
"senderCertificate",
14545 .namespaceZero =
true,
14550 #ifdef UA_ENABLE_TYPENAMES 14551 .memberName =
"receiverCertificateThumbprint",
14553 .namespaceZero =
true,
14561 #ifdef UA_ENABLE_TYPENAMES 14562 .memberName =
"protocolVersion",
14564 .namespaceZero =
true,
14569 #ifdef UA_ENABLE_TYPENAMES 14570 .memberName =
"receiveBufferSize",
14572 .namespaceZero =
true,
14577 #ifdef UA_ENABLE_TYPENAMES 14578 .memberName =
"sendBufferSize",
14580 .namespaceZero =
true,
14585 #ifdef UA_ENABLE_TYPENAMES 14586 .memberName =
"maxMessageSize",
14588 .namespaceZero =
true,
14593 #ifdef UA_ENABLE_TYPENAMES 14594 .memberName =
"maxChunkCount",
14596 .namespaceZero =
true,
14604 #ifdef UA_ENABLE_TYPENAMES 14605 .memberName =
"sequenceNumber",
14607 .namespaceZero =
true,
14612 #ifdef UA_ENABLE_TYPENAMES 14613 .memberName =
"requestId",
14615 .namespaceZero =
true,
14623 #ifdef UA_ENABLE_TYPENAMES 14624 .memberName =
"messageTypeAndChunkType",
14626 .namespaceZero =
true,
14631 #ifdef UA_ENABLE_TYPENAMES 14632 .memberName =
"messageSize",
14634 .namespaceZero =
true,
14642 #ifdef UA_ENABLE_TYPENAMES 14645 .namespaceZero =
true,
14653 #ifdef UA_ENABLE_TYPENAMES 14654 .memberName =
"tokenId",
14656 .namespaceZero =
true,
14664 #ifdef UA_ENABLE_TYPENAMES 14665 .memberName =
"messageHeader",
14667 .namespaceZero =
false,
14672 #ifdef UA_ENABLE_TYPENAMES 14673 .memberName =
"secureChannelId",
14675 .namespaceZero =
true,
14684 #ifdef UA_ENABLE_TYPENAMES 14685 .typeName =
"SecureConversationMessageAbortBody",
14689 .fixedSize =
false,
14690 .overlayable =
false,
14691 .binaryEncodingId = 0,
14693 .members = SecureConversationMessageAbortBody_members },
14696 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14698 #ifdef UA_ENABLE_TYPENAMES 14699 .typeName =
"SecureConversationMessageFooter",
14703 .fixedSize =
false,
14704 .overlayable =
false,
14705 .binaryEncodingId = 0,
14707 .members = SecureConversationMessageFooter_members },
14710 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14712 #ifdef UA_ENABLE_TYPENAMES 14713 .typeName =
"TcpHelloMessage",
14717 .fixedSize =
false,
14718 .overlayable =
false,
14719 .binaryEncodingId = 0,
14721 .members = TcpHelloMessage_members },
14724 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14726 #ifdef UA_ENABLE_TYPENAMES 14727 .typeName =
"TcpErrorMessage",
14731 .fixedSize =
false,
14732 .overlayable =
false,
14733 .binaryEncodingId = 0,
14735 .members = TcpErrorMessage_members },
14738 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14740 #ifdef UA_ENABLE_TYPENAMES 14741 .typeName =
"MessageType",
14747 .binaryEncodingId = 0,
14749 .members = MessageType_members },
14752 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14754 #ifdef UA_ENABLE_TYPENAMES 14755 .typeName =
"AsymmetricAlgorithmSecurityHeader",
14759 .fixedSize =
false,
14760 .overlayable =
false,
14761 .binaryEncodingId = 0,
14763 .members = AsymmetricAlgorithmSecurityHeader_members },
14766 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14768 #ifdef UA_ENABLE_TYPENAMES 14769 .typeName =
"TcpAcknowledgeMessage",
14775 .binaryEncodingId = 0,
14777 .members = TcpAcknowledgeMessage_members },
14780 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14782 #ifdef UA_ENABLE_TYPENAMES 14783 .typeName =
"SequenceHeader",
14789 .binaryEncodingId = 0,
14791 .members = SequenceHeader_members },
14794 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14796 #ifdef UA_ENABLE_TYPENAMES 14797 .typeName =
"TcpMessageHeader",
14803 .binaryEncodingId = 0,
14805 .members = TcpMessageHeader_members },
14808 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14810 #ifdef UA_ENABLE_TYPENAMES 14811 .typeName =
"ChunkType",
14817 .binaryEncodingId = 0,
14819 .members = ChunkType_members },
14822 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14824 #ifdef UA_ENABLE_TYPENAMES 14825 .typeName =
"SymmetricAlgorithmSecurityHeader",
14831 .binaryEncodingId = 0,
14833 .members = SymmetricAlgorithmSecurityHeader_members },
14836 { .typeId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 0},
14838 #ifdef UA_ENABLE_TYPENAMES 14839 .typeName =
"SecureConversationMessageHeader",
14845 .binaryEncodingId = 0,
14847 .members = SecureConversationMessageHeader_members },
14878 message->
data = data;
14879 message->
length = length;
14885 size_t complete_until = 0;
14887 while(message->
length - complete_until >= 8) {
14892 if(msgtype != (
'M' + (
'S' << 8) + (
'G' << 16)) &&
14893 msgtype != (
'E' + (
'R' << 8) + (
'R' << 16)) &&
14894 msgtype != (
'O' + (
'P' << 8) + (
'N' << 16)) &&
14895 msgtype != (
'H' + (
'E' << 8) + (
'L' << 16)) &&
14896 msgtype != (
'A' + (
'C' << 8) + (
'K' << 16)) &&
14897 msgtype != (
'C' + (
'L' << 8) + (
'O' << 16))) {
14898 garbage_end =
true;
14904 size_t length_pos = complete_until + 4;
14905 UA_StatusCode decode_retval = UA_UInt32_decodeBinary(message, &length_pos, &chunk_length);
14909 chunk_length < 16 ||
14911 garbage_end =
true;
14916 if(chunk_length + complete_until > message->
length)
14919 complete_until += chunk_length;
14923 if(complete_until != message->
length) {
14926 if(complete_until == 0)
14928 message->
length = complete_until;
14933 if(complete_until == 0) {
14949 size_t incomplete_length = message->
length - complete_until;
14954 &message->
data[complete_until], incomplete_length);
14955 message->
length = complete_until;
14972 *realloced =
false;
14977 retval = connection->
recv(connection, chunks, timeout);
14999 UA_atomic_cmpxchg((
void**)&channel->
connection, connection,
NULL);
15000 UA_atomic_xchg((
void**)&connection->
channel,
NULL);
15008 UA_atomic_xchg((
void**)&connection->
channel, (
void*)channel);
15013 const char ** port,
const char **path) {
15014 if (!endpointUrl || !hostname)
15017 size_t urlLength = strlen(endpointUrl);
15018 if(urlLength < 10 || urlLength >= 256)
15021 if(strncmp(endpointUrl,
"opc.tcp://", 10) != 0)
15024 if (urlLength == 10) {
15025 hostname[0] =
'\0';
15031 size_t portpos = 10;
15034 UA_Boolean ip6_end_found = endpointUrl[portpos] !=
'[';
15035 for(; portpos < urlLength; ++portpos) {
15036 if (!ip6_end_found) {
15037 if (endpointUrl[portpos] ==
']')
15042 if(endpointUrl[portpos] ==
':' || endpointUrl[portpos] ==
'/')
15046 memcpy(hostname, &endpointUrl[10], portpos - 10);
15047 hostname[portpos-10] = 0;
15050 if (portpos < urlLength - 1) {
15051 if (endpointUrl[portpos] ==
'/')
15054 *port = &endpointUrl[portpos + 1];
15061 size_t pathpos = portpos < urlLength ? portpos : 10;
15062 for(; pathpos < urlLength; ++pathpos) {
15063 if(endpointUrl[pathpos] ==
'/')
15066 if (pathpos < urlLength-1)
15067 *path = &endpointUrl[pathpos+1];
15078 UA_UInt16 * port,
const char ** path) {
15079 const char* portTmp =
NULL;
15080 const char* pathTmp =
NULL;
15084 hostname[0] =
'\0';
15095 portLen = (size_t)(pathTmp-portTmp-1);
15097 portLen = strlen(portTmp);
15102 memcpy(portStr, portTmp, portLen);
15103 portStr[portLen]=
'\0';
15106 for (
size_t i=0; i<6; ++i) {
15107 if (portStr[i] == 0)
15109 if (portStr[i] <
'0' || portStr[i] >
'9')
15132 size_t progress = 0;
15134 while(progress < buflen) {
15136 if(
'0' > c ||
'9' < c)
15152 #define UA_SECURE_MESSAGE_HEADER_LENGTH 24 15164 UA_ByteString_deleteMembers(&channel->
serverNonce);
15166 UA_ByteString_deleteMembers(&channel->
clientNonce);
15167 UA_ChannelSecurityToken_deleteMembers(&channel->
securityToken);
15178 se->session->channel =
NULL;
15186 UA_ByteString_deleteMembers(&ch->bytes);
15197 nonce->
data[0] =
'a';
15201 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15202 #pragma GCC diagnostic push 15203 #pragma GCC diagnostic ignored "-Wextra" 15204 #pragma GCC diagnostic ignored "-Wcast-qual" 15205 #pragma GCC diagnostic ignored "-Wunused-value" 15212 se->session = session;
15213 if(UA_atomic_cmpxchg((
void**)&session->
channel,
NULL, channel) !=
NULL) {
15220 #if (__GNUC__ >= 4 && __GNUC_MINOR__ >= 6) 15221 #pragma GCC diagnostic pop 15229 if(se->session == session)
15246 return se->session;
15296 UA_String_init(&errorMsg);
15298 UA_UInt32_encodeBinary(&ci->
errorCode, dst, &offset);
15299 UA_String_encodeBinary(&errorMsg, dst, &offset);
15310 size_t offset_header = 0;
15311 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, dst, &offset_header);
15312 UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symSecHeader, dst, &offset_header);
15313 UA_SequenceHeader_encodeBinary(&seqHeader, dst, &offset_header);
15336 const void *content,
const UA_DataType *contentType) {
15353 size_t messagePos = 0;
15356 UA_NodeId_encodeBinary(&typeId, &message, &messagePos);
15373 &ci, &message, &messagePos);
15380 UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15387 return UA_SecureChannel_sendChunk(&ci, &message, messagePos);
15398 if(ch->requestId == requestId) {
15399 UA_ByteString_deleteMembers(&ch->bytes);
15410 size_t offset,
size_t chunklength) {
15411 UA_Byte* new_bytes =
UA_realloc(ch->bytes.data, ch->bytes.length + chunklength);
15413 UA_ByteString_deleteMembers(&ch->bytes);
15416 ch->bytes.data = new_bytes;
15417 memcpy(&ch->bytes.data[ch->bytes.length], &msg->
data[offset], chunklength);
15418 ch->bytes.length += chunklength;
15424 size_t chunklength) {
15426 if(msg->
length - offset < chunklength) {
15428 UA_SecureChannel_removeChunk(channel, requestId);
15435 if(ch->requestId == requestId)
15444 ch->requestId = requestId;
15445 UA_ByteString_init(&ch->bytes);
15449 appendChunk(ch, msg, offset, chunklength);
15455 size_t chunklength,
UA_Boolean *deleteChunk) {
15456 if(msg->
length - offset < chunklength) {
15458 UA_SecureChannel_removeChunk(channel, requestId);
15464 if(ch->requestId == requestId)
15470 *deleteChunk =
false;
15471 bytes.
length = chunklength;
15474 *deleteChunk =
true;
15475 appendChunk(ch, msg, offset, chunklength);
15503 if (chunks->
length > 3 && chunks->
data[offset] ==
'E' &&
15504 chunks->
data[offset+1] ==
'R' && chunks->
data[offset+2] ==
'R') {
15506 retval = UA_TcpMessageHeader_decodeBinary(chunks, &offset, &header);
15511 retval = UA_TcpErrorMessage_decodeBinary(chunks, &offset, &errorMessage);
15520 size_t initial_offset = offset;
15524 retval = UA_SecureConversationMessageHeader_decodeBinary(chunks, &offset, &header);
15537 UA_SequenceHeader_init(&sequenceHeader);
15542 retval |= UA_UInt32_decodeBinary(chunks, &offset, &tokenId);
15543 retval |= UA_SequenceHeader_decodeBinary(chunks, &offset, &sequenceHeader);
15555 retval = UA_SecureChannel_processSequenceNumber(channel, sequenceHeader.
sequenceNumber);
15561 size_t processed_header = offset - initial_offset;
15564 UA_SecureChannel_appendChunk(channel, sequenceHeader.
requestId, chunks, offset,
15570 UA_SecureChannel_finalizeChunk(channel, sequenceHeader.
requestId, chunks, offset,
15573 if(message.
length > 0) {
15577 UA_ByteString_deleteMembers(&message);
15581 UA_SecureChannel_removeChunk(channel, sequenceHeader.
requestId);
15589 }
while(chunks->
length > offset);
15600 #ifdef UA_ENABLE_SUBSCRIPTIONS 15603 UA_Session adminSession = {
15605 .applicationName = {.locale = {0,
NULL}, .text = {0,
NULL}},
15607 .gatewayServerUri = {0,
NULL}, .discoveryProfileUri = {0,
NULL},
15608 .discoveryUrlsSize = 0, .discoveryUrls =
NULL},
15609 .sessionName = {
sizeof(
"Administrator Session")-1, (
UA_Byte*)
"Administrator Session"},
15611 .identifier.numeric = 1},
15612 .sessionId = {.namespaceIndex = 0, .identifierType =
UA_NODEIDTYPE_NUMERIC, .identifier.numeric = 1},
15615 .continuationPoints = {
NULL}};
15629 LIST_INIT(&session->continuationPoints);
15630 #ifdef UA_ENABLE_SUBSCRIPTIONS 15631 LIST_INIT(&session->serverSubscriptions);
15632 session->lastSubscriptionID = 0;
15640 UA_NodeId_deleteMembers(&session->
sessionId);
15645 UA_ByteString_deleteMembers(&cp->identifier);
15646 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
15651 #ifdef UA_ENABLE_SUBSCRIPTIONS 15658 UA_PublishResponseEntry *entry;
15661 UA_PublishResponse_deleteMembers(&entry->response);
15672 #ifdef UA_ENABLE_SUBSCRIPTIONS 15674 void UA_Session_addSubscription(UA_Session *session,
UA_Subscription *newSubscription) {
15675 LIST_INSERT_HEAD(&session->serverSubscriptions, newSubscription, listEntry);
15679 UA_Session_deleteSubscription(UA_Server *server, UA_Session *session,
15681 UA_Subscription *sub = UA_Session_getSubscriptionByID(session, subscriptionID);
15691 UA_Session_getSubscriptionByID(UA_Session *session,
UA_UInt32 subscriptionID) {
15693 LIST_FOREACH(sub, &session->serverSubscriptions, listEntry) {
15694 if(sub->subscriptionID == subscriptionID)
15700 UA_UInt32 UA_Session_getUniqueSubscriptionID(UA_Session *session) {
15701 return ++(session->lastSubscriptionID);
15713 #ifdef UA_ENABLE_GENERATE_NAMESPACE0 15716 #ifdef UA_ENABLE_SUBSCRIPTIONS 15719 #if defined(UA_ENABLE_MULTITHREADING) && !defined(NDEBUG) 15723 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 15727 static const UA_NodeId nodeIdHasSubType = {
15730 static const UA_NodeId nodeIdHasComponent = {
15733 static const UA_NodeId nodeIdHasProperty = {
15736 static const UA_NodeId nodeIdOrganizes = {
15740 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 15741 static const UA_NodeId nodeIdNonHierarchicalReferences = {
15773 .data = (
UA_Byte*)(uintptr_t)name};
15793 size_t refssize = parent->referencesSize;
15801 for(
size_t i = parent->referencesSize; i > 0; --i) {
15813 addNodeInternal(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15816 UA_AddNodesResult_init(&res);
15819 &referenceTypeId, &UA_NODEID_NULL,
15826 addNodeInternalWithType(UA_Server *server, UA_Node *node,
const UA_NodeId parentNodeId,
15829 UA_AddNodesResult_init(&res);
15832 &referenceTypeId, &typeIdentifier,
15840 deleteInstanceChildren(UA_Server *server,
UA_NodeId *objectNodeId) {
15843 UA_BrowseDescription_init(&bDes);
15844 bDes.
nodeId = *objectNodeId;
15857 true, rd->
nodeId,
true);
15861 UA_BrowseResult_deleteMembers(&bRes);
15883 #ifdef UA_ENABLE_MULTITHREADING 15884 pthread_cond_destroy(&server->dispatchQueue_condition);
15885 pthread_mutex_destroy(&server->dispatchQueue_mutex);
15891 static void UA_Server_cleanup(UA_Server *server,
void *_) {
15906 UA_Server *server = (UA_Server*)handle;
15912 UA_BuildInfo_copy(&server->config.buildInfo, &retval->
buildInfo);
15920 if(sourceTimeStamp) {
15939 UA_Byte *byte = UA_Byte_new();
15945 if(sourceTimeStamp) {
15970 if(sourceTimeStamp) {
15985 UA_Server *server = (UA_Server*)handle;
15992 if(sourceTimestamp) {
16002 UA_Server *server = (UA_Server*)handle;
16020 if(newNamespacesSize <= server->namespacesSize)
16030 for(
size_t i = server->
namespacesSize; i < newNamespacesSize; ++i)
16049 if(sourceTimeStamp) {
16056 static void copyNames(UA_Node *node,
char *name) {
16057 node->browseName = UA_QUALIFIEDNAME_ALLOC(0, name);
16058 node->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16059 node->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US", name);
16063 addDataTypeNode(UA_Server *server,
char* name,
UA_UInt32 datatypeid,
16066 copyNames((UA_Node*)datatype, name);
16067 datatype->nodeId.identifier.numeric = datatypeid;
16068 datatype->isAbstract = isAbstract;
16069 addNodeInternal(server, (UA_Node*)datatype,
16070 UA_NODEID_NUMERIC(0, parent), nodeIdHasSubType);
16074 addObjectTypeNode(UA_Server *server,
char* name,
UA_UInt32 objecttypeid,
16077 copyNames((UA_Node*)objecttype, name);
16078 objecttype->nodeId.identifier.numeric = objecttypeid;
16079 addNodeInternal(server, (UA_Node*)objecttype, UA_NODEID_NUMERIC(0, parent),
16080 UA_NODEID_NUMERIC(0, parentreference));
16084 createVariableTypeNode(UA_Server *server,
char* name,
UA_UInt32 variabletypeid,
16087 copyNames((UA_Node*)variabletype, name);
16088 variabletype->nodeId.identifier.numeric = variabletypeid;
16089 variabletype->isAbstract =
abstract;
16090 return variabletype;
16093 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16095 GetMonitoredItems(
void *handle,
const UA_NodeId objectId,
size_t inputSize,
16098 UA_Session* session = methodCallSession;
16099 UA_Subscription* subscription = UA_Session_getSubscriptionByID(session, subscriptionId);
16105 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16108 if(sizeOfOutput==0)
16114 LIST_FOREACH(monitoredItem, &subscription->monitoredItems, listEntry) {
16115 clientHandles[i] = monitoredItem->clientHandle;
16116 serverHandles[i] = monitoredItem->itemId;
16119 UA_Variant_setArray(&output[0], clientHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16120 UA_Variant_setArray(&output[1], serverHandles, sizeOfOutput, &UA_TYPES[UA_TYPES_UINT32]);
16126 UA_Server *server =
UA_calloc(1,
sizeof(UA_Server));
16130 server->config = config;
16134 #ifdef UA_ENABLE_MULTITHREADING 16136 cds_wfcq_init(&server->dispatchQueue_head, &server->dispatchQueue_tail);
16137 cds_lfs_init(&server->mainLoopJobs);
16142 #ifndef UA_ENABLE_DETERMINISTIC_RNG 16149 UA_String_copy(&server->config.applicationDescription.applicationUri, &server->
namespaces[1]);
16156 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
16162 UA_STRING_ALLOC(
"http://opcfoundation.org/UA-Profile/Transport/uatcp-uasc-uabinary");
16164 size_t policies = 0;
16165 if(server->config.enableAnonymousLogin)
16167 if(server->config.enableUsernamePasswordLogin)
16172 size_t currentIndex = 0;
16173 if(server->config.enableAnonymousLogin) {
16179 if(server->config.enableUsernamePasswordLogin) {
16188 UA_String_copy(&server->config.serverCertificate, &endpoint->
serverCertificate);
16189 UA_ApplicationDescription_copy(&server->config.applicationDescription, &endpoint->
server);
16198 UA_Job cleanup = {.
type = UA_JOBTYPE_METHODCALL,
16204 #ifndef UA_ENABLE_GENERATE_NAMESPACE0 16211 copyNames((UA_Node*)references,
"References");
16213 references->isAbstract =
true;
16214 references->symmetric =
true;
16215 references->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"References");
16218 copyNames((UA_Node*)hassubtype,
"HasSubtype");
16219 hassubtype->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HasSupertype");
16221 hassubtype->isAbstract =
false;
16222 hassubtype->symmetric =
false;
16230 copyNames((UA_Node*)hierarchicalreferences,
"HierarchicalReferences");
16232 hierarchicalreferences->isAbstract =
true;
16233 hierarchicalreferences->symmetric =
false;
16234 addNodeInternal(server, (UA_Node*)hierarchicalreferences,
16238 copyNames((UA_Node*)nonhierarchicalreferences,
"NonHierarchicalReferences");
16240 nonhierarchicalreferences->isAbstract =
true;
16241 nonhierarchicalreferences->symmetric =
false;
16242 addNodeInternal(server, (UA_Node*)nonhierarchicalreferences,
16246 copyNames((UA_Node*)haschild,
"HasChild");
16248 haschild->isAbstract =
false;
16249 haschild->symmetric =
false;
16250 addNodeInternal(server, (UA_Node*)haschild,
16254 copyNames((UA_Node*)organizes,
"Organizes");
16255 organizes->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrganizedBy");
16257 organizes->isAbstract =
false;
16258 organizes->symmetric =
false;
16259 addNodeInternal(server, (UA_Node*)organizes,
16263 copyNames((UA_Node*)haseventsource,
"HasEventSource");
16264 haseventsource->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EventSourceOf");
16266 haseventsource->isAbstract =
false;
16267 haseventsource->symmetric =
false;
16268 addNodeInternal(server, (UA_Node*)haseventsource,
16272 copyNames((UA_Node*)hasmodellingrule,
"HasModellingRule");
16273 hasmodellingrule->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModellingRuleOf");
16275 hasmodellingrule->isAbstract =
false;
16276 hasmodellingrule->symmetric =
false;
16277 addNodeInternal(server, (UA_Node*)hasmodellingrule, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16280 copyNames((UA_Node*)hasencoding,
"HasEncoding");
16281 hasencoding->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"EncodingOf");
16283 hasencoding->isAbstract =
false;
16284 hasencoding->symmetric =
false;
16285 addNodeInternal(server, (UA_Node*)hasencoding, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16288 copyNames((UA_Node*)hasdescription,
"HasDescription");
16289 hasdescription->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"DescriptionOf");
16291 hasdescription->isAbstract =
false;
16292 hasdescription->symmetric =
false;
16293 addNodeInternal(server, (UA_Node*)hasdescription, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16296 copyNames((UA_Node*)hastypedefinition,
"HasTypeDefinition");
16297 hastypedefinition->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"TypeDefinitionOf");
16299 hastypedefinition->isAbstract =
false;
16300 hastypedefinition->symmetric =
false;
16301 addNodeInternal(server, (UA_Node*)hastypedefinition, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16304 copyNames((UA_Node*)generatesevent,
"GeneratesEvent");
16305 generatesevent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"GeneratedBy");
16307 generatesevent->isAbstract =
false;
16308 generatesevent->symmetric =
false;
16309 addNodeInternal(server, (UA_Node*)generatesevent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16312 copyNames((UA_Node*)aggregates,
"Aggregates");
16313 aggregates->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"AggregatedBy");
16315 aggregates->isAbstract =
false;
16316 aggregates->symmetric =
false;
16317 addNodeInternal(server, (UA_Node*)aggregates, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCHILD), nodeIdHasSubType);
16324 copyNames((UA_Node*)hasproperty,
"HasProperty");
16325 hasproperty->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"PropertyOf");
16327 hasproperty->isAbstract =
false;
16328 hasproperty->symmetric =
false;
16329 addNodeInternal(server, (UA_Node*)hasproperty,
16333 copyNames((UA_Node*)hascomponent,
"HasComponent");
16334 hascomponent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ComponentOf");
16336 hascomponent->isAbstract =
false;
16337 hascomponent->symmetric =
false;
16338 addNodeInternal(server, (UA_Node*)hascomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16341 copyNames((UA_Node*)hasnotifier,
"HasNotifier");
16342 hasnotifier->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"NotifierOf");
16344 hasnotifier->isAbstract =
false;
16345 hasnotifier->symmetric =
false;
16346 addNodeInternal(server, (UA_Node*)hasnotifier, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASEVENTSOURCE), nodeIdHasSubType);
16349 copyNames((UA_Node*)hasorderedcomponent,
"HasOrderedComponent");
16350 hasorderedcomponent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OrderedComponentOf");
16352 hasorderedcomponent->isAbstract =
false;
16353 hasorderedcomponent->symmetric =
false;
16354 addNodeInternal(server, (UA_Node*)hasorderedcomponent, UA_NODEID_NUMERIC(0,
UA_NS0ID_HASCOMPONENT), nodeIdHasSubType);
16357 copyNames((UA_Node*)hasmodelparent,
"HasModelParent");
16358 hasmodelparent->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ModelParentOf");
16360 hasmodelparent->isAbstract =
false;
16361 hasmodelparent->symmetric =
false;
16362 addNodeInternal(server, (UA_Node*)hasmodelparent, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16365 copyNames((UA_Node*)fromstate,
"FromState");
16366 fromstate->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"ToTransition");
16368 fromstate->isAbstract =
false;
16369 fromstate->symmetric =
false;
16370 addNodeInternal(server, (UA_Node*)fromstate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16373 copyNames((UA_Node*)tostate,
"ToState");
16374 tostate->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"FromTransition");
16376 tostate->isAbstract =
false;
16377 tostate->symmetric =
false;
16378 addNodeInternal(server, (UA_Node*)tostate, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16381 copyNames((UA_Node*)hascause,
"HasCause");
16382 hascause->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeCausedBy");
16384 hascause->isAbstract =
false;
16385 hascause->symmetric =
false;
16386 addNodeInternal(server, (UA_Node*)hascause, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16389 copyNames((UA_Node*)haseffect,
"HasEffect");
16390 haseffect->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"MayBeEffectedBy");
16392 haseffect->isAbstract =
false;
16393 haseffect->symmetric =
false;
16394 addNodeInternal(server, (UA_Node*)haseffect, nodeIdNonHierarchicalReferences, nodeIdHasSubType);
16397 copyNames((UA_Node*)hashistoricalconfiguration,
"HasHistoricalConfiguration");
16398 hashistoricalconfiguration->inverseName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"HistoricalConfigurationOf");
16400 hashistoricalconfiguration->isAbstract =
false;
16401 hashistoricalconfiguration->symmetric =
false;
16402 addNodeInternal(server, (UA_Node*)hashistoricalconfiguration, UA_NODEID_NUMERIC(0,
UA_NS0ID_AGGREGATES), nodeIdHasSubType);
16409 copyNames((UA_Node*)basedatatype,
"BaseDataType");
16411 basedatatype->isAbstract =
true;
16454 basevartype->valueRank = -2;
16462 basedatavartype->valueRank = -2;
16464 addNodeInternalWithType(server, (UA_Node*)basedatavartype,
16470 propertytype->valueRank = -2;
16472 addNodeInternalWithType(server, (UA_Node*)propertytype,
16478 buildinfotype->valueRank = -1;
16480 addNodeInternalWithType(server, (UA_Node*)buildinfotype,
16486 serverstatustype->valueRank = -1;
16488 addNodeInternalWithType(server, (UA_Node*)serverstatustype,
16497 copyNames((UA_Node*)baseobjtype,
"BaseObjectType");
16518 static const UA_NodeId nodeIdFolderType = {
16521 static const UA_NodeId nodeIdHasTypeDefinition = {
16526 copyNames((UA_Node*)root,
"Root");
16535 copyNames((UA_Node*)objects,
"Objects");
16537 addNodeInternalWithType(server, (UA_Node*)objects, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16538 nodeIdOrganizes, nodeIdFolderType);
16541 copyNames((UA_Node*)types,
"Types");
16543 addNodeInternalWithType(server, (UA_Node*)types, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16544 nodeIdOrganizes, nodeIdFolderType);
16547 copyNames((UA_Node*)referencetypes,
"ReferenceTypes");
16549 addNodeInternalWithType(server, (UA_Node*)referencetypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16550 nodeIdOrganizes, nodeIdFolderType);
16555 copyNames((UA_Node*)datatypes,
"DataTypes");
16557 addNodeInternalWithType(server, (UA_Node*)datatypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16558 nodeIdOrganizes, nodeIdFolderType);
16563 copyNames((UA_Node*)variabletypes,
"VariableTypes");
16565 addNodeInternalWithType(server, (UA_Node*)variabletypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16566 nodeIdOrganizes, nodeIdFolderType);
16571 copyNames((UA_Node*)objecttypes,
"ObjectTypes");
16573 addNodeInternalWithType(server, (UA_Node*)objecttypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16574 nodeIdOrganizes, nodeIdFolderType);
16579 copyNames((UA_Node*)eventtypes,
"EventTypes");
16581 addNodeInternalWithType(server, (UA_Node*)eventtypes, UA_NODEID_NUMERIC(0,
UA_NS0ID_TYPESFOLDER),
16582 nodeIdOrganizes, nodeIdFolderType);
16585 copyNames((UA_Node*)views,
"Views");
16587 addNodeInternalWithType(server, (UA_Node*)views, UA_NODEID_NUMERIC(0,
UA_NS0ID_ROOTFOLDER),
16588 nodeIdOrganizes, nodeIdFolderType);
16595 copyNames((UA_Node*)mandatory,
"Mandatory");
16597 addNodeInternalWithType(server, (UA_Node*)mandatory, UA_NODEID_NULL,
16601 copyNames((UA_Node*)optional,
"Optional");
16603 addNodeInternalWithType(server, (UA_Node*)optional, UA_NODEID_NULL,
16608 ua_namespaceinit_generated(server);
16617 copyNames((UA_Node*)servernode,
"Server");
16626 deleteInstanceChildren(server, &serverNodeId);
16629 copyNames((UA_Node*)namespaceArray,
"NamespaceArray");
16632 namespaceArray->value.dataSource = (UA_DataSource) {.handle = server, .read = readNamespaces,
16633 .write = writeNamespaces};
16635 namespaceArray->valueRank = 1;
16636 namespaceArray->minimumSamplingInterval = 1.0;
16637 addNodeInternalWithType(server, (UA_Node*)namespaceArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16641 copyNames((UA_Node*)serverArray,
"ServerArray");
16644 &server->config.applicationDescription.applicationUri, 1,
16645 &UA_TYPES[UA_TYPES_STRING]);
16646 serverArray->value.data.value.hasValue =
true;
16647 serverArray->valueRank = 1;
16648 serverArray->minimumSamplingInterval = 1.0;
16649 addNodeInternalWithType(server, (UA_Node*)serverArray, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16653 copyNames((UA_Node*)servercapablities,
"ServerCapabilities");
16655 addNodeInternalWithType(server, (UA_Node*)servercapablities, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16656 nodeIdHasComponent,
16659 deleteInstanceChildren(server, &ServerCapabilitiesNodeId);
16662 copyNames((UA_Node*)localeIdArray,
"LocaleIdArray");
16666 &enLocale, 1, &UA_TYPES[UA_TYPES_STRING]);
16667 localeIdArray->value.data.value.hasValue =
true;
16668 localeIdArray->valueRank = 1;
16669 localeIdArray->minimumSamplingInterval = 1.0;
16670 addNodeInternalWithType(server, (UA_Node*)localeIdArray,
16675 copyNames((UA_Node*)maxBrowseContinuationPoints,
"MaxBrowseContinuationPoints");
16676 maxBrowseContinuationPoints->nodeId.identifier.numeric =
16680 maxBrowseContinuationPoints->value.data.value.hasValue =
true;
16681 addNodeInternalWithType(server, (UA_Node*)maxBrowseContinuationPoints,
16686 #define MAX_PROFILEARRAY 16 //a *magic* limit to the number of supported profiles 16687 #define ADDPROFILEARRAY(x) profileArray[profileArraySize++] = UA_STRING_ALLOC(x) 16690 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NanoEmbeddedDevice");
16692 #ifdef UA_ENABLE_SERVICESET_NODEMANAGEMENT 16693 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/NodeManagement");
16695 #ifdef UA_ENABLE_SERVICESET_METHOD 16696 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/Methods");
16698 #ifdef UA_ENABLE_SUBSCRIPTIONS 16699 ADDPROFILEARRAY(
"http://opcfoundation.org/UA-Profile/Server/EmbeddedDataChangeSubscription");
16703 copyNames((UA_Node*)serverProfileArray,
"ServerProfileArray");
16706 UA_Array_new(profileArraySize, &UA_TYPES[UA_TYPES_STRING]),
16707 profileArraySize, &UA_TYPES[UA_TYPES_STRING]);
16708 for(
UA_UInt16 i=0;i<profileArraySize;++i)
16709 ((
UA_String *)serverProfileArray->value.data.value.value.data)[i] = profileArray[i];
16710 serverProfileArray->value.data.value.hasValue =
true;
16711 serverProfileArray->valueRank = 1;
16712 serverProfileArray->minimumSamplingInterval = 1.0;
16713 addNodeInternalWithType(server, (UA_Node*)serverProfileArray,
16718 copyNames((UA_Node*)softwareCertificates,
"SoftwareCertificates");
16721 addNodeInternalWithType(server, (UA_Node*)softwareCertificates,
16726 copyNames((UA_Node*)maxQueryContinuationPoints,
"MaxQueryContinuationPoints");
16729 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16730 maxQueryContinuationPoints->value.data.value.hasValue =
true;
16731 addNodeInternalWithType(server, (UA_Node*)maxQueryContinuationPoints,
16736 copyNames((UA_Node*)maxHistoryContinuationPoints,
"MaxHistoryContinuationPoints");
16739 UA_UInt16_new(), &UA_TYPES[UA_TYPES_UINT16]);
16740 maxHistoryContinuationPoints->value.data.value.hasValue =
true;
16741 addNodeInternalWithType(server, (UA_Node*)maxHistoryContinuationPoints,
16746 copyNames((UA_Node*)minSupportedSampleRate,
"MinSupportedSampleRate");
16750 minSupportedSampleRate->value.data.value.hasValue =
true;
16751 addNodeInternalWithType(server, (UA_Node*)minSupportedSampleRate,
16756 copyNames((UA_Node*)modellingRules,
"ModellingRules");
16758 addNodeInternalWithType(server, (UA_Node*)modellingRules,
16763 copyNames((UA_Node*)aggregateFunctions,
"AggregateFunctions");
16765 addNodeInternalWithType(server, (UA_Node*)aggregateFunctions,
16770 copyNames((UA_Node*)serverdiagnostics,
"ServerDiagnostics");
16772 addNodeInternalWithType(server, (UA_Node*)serverdiagnostics,
16776 deleteInstanceChildren(server, &ServerDiagnosticsNodeId);
16779 copyNames((UA_Node*)enabledFlag,
"EnabledFlag");
16783 enabledFlag->value.data.value.hasValue =
true;
16784 enabledFlag->valueRank = 1;
16785 enabledFlag->minimumSamplingInterval = 1.0;
16786 addNodeInternalWithType(server, (UA_Node*)enabledFlag,
16791 copyNames((UA_Node*)serverstatus,
"ServerStatus");
16794 serverstatus->value.dataSource = (UA_DataSource) {.handle = server, .read = readStatus,
16796 addNodeInternalWithType(server, (UA_Node*)serverstatus, UA_NODEID_NUMERIC(0,
UA_NS0ID_SERVER),
16800 copyNames((UA_Node*)starttime,
"StartTime");
16804 starttime->value.data.value.hasValue =
true;
16805 addNodeInternalWithType(server, (UA_Node*)starttime,
16810 copyNames((UA_Node*)currenttime,
"CurrentTime");
16813 currenttime->value.dataSource = (UA_DataSource) {.handle =
NULL, .read = readCurrentTime,
16815 addNodeInternalWithType(server, (UA_Node*)currenttime,
16820 copyNames((UA_Node*)state,
"State");
16824 state->value.data.value.hasValue =
true;
16825 state->minimumSamplingInterval = 500.0f;
16830 copyNames((UA_Node*)buildinfo,
"BuildInfo");
16834 buildinfo->value.data.value.hasValue =
true;
16835 addNodeInternalWithType(server, (UA_Node*)buildinfo,
16840 copyNames((UA_Node*)producturi,
"ProductUri");
16843 &UA_TYPES[UA_TYPES_STRING]);
16844 producturi->value.data.value.hasValue =
true;
16845 addNodeInternalWithType(server, (UA_Node*)producturi,
16850 copyNames((UA_Node*)manufacturername,
"ManufacturerName");
16853 &server->config.buildInfo.manufacturerName,
16854 &UA_TYPES[UA_TYPES_STRING]);
16855 manufacturername->value.data.value.hasValue =
true;
16856 addNodeInternalWithType(server, (UA_Node*)manufacturername,
16861 copyNames((UA_Node*)productname,
"ProductName");
16864 &UA_TYPES[UA_TYPES_STRING]);
16865 productname->value.data.value.hasValue =
true;
16866 addNodeInternalWithType(server, (UA_Node*)productname,
16871 copyNames((UA_Node*)softwareversion,
"SoftwareVersion");
16874 &server->config.buildInfo.softwareVersion, &UA_TYPES[UA_TYPES_STRING]);
16875 softwareversion->value.data.value.hasValue =
true;
16876 addNodeInternalWithType(server, (UA_Node*)softwareversion,
16881 copyNames((UA_Node*)buildnumber,
"BuildNumber");
16884 &UA_TYPES[UA_TYPES_STRING]);
16885 buildnumber->value.data.value.hasValue =
true;
16886 addNodeInternalWithType(server, (UA_Node*)buildnumber,
16891 copyNames((UA_Node*)builddate,
"BuildDate");
16894 &UA_TYPES[UA_TYPES_DATETIME]);
16895 builddate->value.data.value.hasValue =
true;
16896 addNodeInternalWithType(server, (UA_Node*)builddate,
16901 copyNames((UA_Node*)secondstillshutdown,
"SecondsTillShutdown");
16905 secondstillshutdown->value.data.value.hasValue =
true;
16906 addNodeInternalWithType(server, (UA_Node*)secondstillshutdown,
16911 copyNames((UA_Node*)shutdownreason,
"ShutdownReason");
16915 shutdownreason->value.data.value.hasValue =
true;
16916 addNodeInternalWithType(server, (UA_Node*)shutdownreason,
16921 copyNames((UA_Node*)servicelevel,
"ServiceLevel");
16924 servicelevel->value.dataSource = (UA_DataSource) {.handle = server, .read = readServiceLevel,
16926 addNodeInternalWithType(server, (UA_Node*)servicelevel,
16931 copyNames((UA_Node*)auditing,
"Auditing");
16934 auditing->value.dataSource = (UA_DataSource) {.handle = server, .read = readAuditing, .write =
NULL};
16935 addNodeInternalWithType(server, (UA_Node*)auditing,
16940 copyNames((UA_Node*)vendorServerInfo,
"VendorServerInfo");
16942 addNodeInternalWithType(server, (UA_Node*)vendorServerInfo,
16952 copyNames((UA_Node*)serverRedundancy,
"ServerRedundancy");
16954 addNodeInternalWithType(server, (UA_Node*)serverRedundancy,
16963 copyNames((UA_Node*)redundancySupport,
"RedundancySupport");
16965 redundancySupport->valueRank = -1;
16970 redundancySupport->value.data.value.hasValue =
true;
16971 addNodeInternalWithType(server, (UA_Node*)redundancySupport,
16975 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 16977 UA_Argument_init(&inputArguments);
16979 inputArguments.
name = UA_STRING(
"SubscriptionId");
16983 UA_Argument_init(&outputArguments[0]);
16985 outputArguments[0].
name = UA_STRING(
"ServerHandles");
16988 UA_Argument_init(&outputArguments[1]);
16990 outputArguments[1].
name = UA_STRING(
"ClientHandles");
16994 UA_MethodAttributes_init(&addmethodattributes);
16995 addmethodattributes.
displayName = UA_LOCALIZEDTEXT(
"",
"GetMonitoredItems");
17002 UA_QUALIFIEDNAME(0,
"GetMonitoredItems"), addmethodattributes,
17005 1, &inputArguments, 2, outputArguments,
NULL);
17027 UA_StatusCode retval = UA_RequestHeader_decodeBinary(msg, &offset, &requestHeader);
17031 UA_init(response, responseType);
17037 UA_RequestHeader_deleteMembers(&requestHeader);
17038 UA_ResponseHeader_deleteMembers(responseHeader);
17045 switch(requestTypeId) {
17050 *requiresSession =
false;
17056 *requiresSession =
false;
17062 *requiresSession =
false;
17110 #ifdef UA_ENABLE_SUBSCRIPTIONS 17162 #ifdef UA_ENABLE_METHODCALLS 17170 #ifdef UA_ENABLE_NODEMANAGEMENT 17205 if(UA_TcpHelloMessage_decodeBinary(msg, offset, &helloMessage) !=
UA_STATUSCODE_GOOD) {
17206 connection->
close(connection);
17221 UA_TcpHelloMessage_deleteMembers(&helloMessage);
17237 UA_ByteString_init(&ack_msg);
17245 UA_TcpMessageHeader_encodeBinary(&ackHeader, &ack_msg, &tmpPos);
17246 UA_TcpAcknowledgeMessage_encodeBinary(&ackMessage, &ack_msg, &tmpPos);
17248 connection->
send(connection, &ack_msg);
17260 if(!connection->
channel && channelId != 0)
17272 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(msg, &offset, &asymHeader);
17273 retval |= UA_SequenceHeader_decodeBinary(msg, &offset, &seqHeader);
17274 retval |= UA_NodeId_decodeBinary(msg, &offset, &requestType);
17275 retval |= UA_OpenSecureChannelRequest_decodeBinary(msg, &offset, &r);
17279 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17280 UA_NodeId_deleteMembers(&requestType);
17281 UA_OpenSecureChannelRequest_deleteMembers(&r);
17282 connection->
close(connection);
17288 UA_OpenSecureChannelResponse_init(&p);
17290 UA_OpenSecureChannelRequest_deleteMembers(&r);
17295 UA_OpenSecureChannelResponse_deleteMembers(&p);
17296 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17297 connection->
close(connection);
17306 UA_ByteString_init(&resp_msg);
17309 UA_OpenSecureChannelResponse_deleteMembers(&p);
17310 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17311 connection->
close(connection);
17316 size_t tmpPos = 12;
17318 retval |= UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &resp_msg, &tmpPos);
17319 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &resp_msg, &tmpPos);
17321 retval |= UA_NodeId_encodeBinary(&responseType, &resp_msg, &tmpPos);
17322 retval |= UA_OpenSecureChannelResponse_encodeBinary(&p, &resp_msg, &tmpPos);
17326 UA_OpenSecureChannelResponse_deleteMembers(&p);
17327 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17328 connection->
close(connection);
17338 UA_SecureConversationMessageHeader_encodeBinary(&respHeader, &resp_msg, &tmpPos);
17340 connection->
send(connection, &resp_msg);
17343 UA_OpenSecureChannelResponse_deleteMembers(&p);
17344 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
17352 size_t *offset = &ppos;
17356 UA_StatusCode retval = UA_NodeId_decodeBinary(msg, offset, &requestTypeId);
17360 UA_NodeId_deleteMembers(&requestTypeId);
17363 size_t requestPos = *offset;
17371 &responseType, &service, &sessionRequired);
17375 "Client requested a subscription, " \
17376 "but those are not enabled in the build");
17379 "Unknown request with type identifier %i",
17388 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 17390 sessionRequired =
false;
17399 "Could not decode the request");
17400 sendError(channel, msg, requestPos, responseType, requestId, retval);
17406 UA_init(response, responseType);
17407 UA_Session *session =
NULL;
17412 goto send_response;
17424 "Trying to activate a session that is " \
17425 "not known in the server");
17426 sendError(channel, msg, requestPos, responseType,
17432 goto send_response;
17436 UA_Session anonymousSession;
17438 if(sessionRequired) {
17440 "Service request %i without a valid session",
17442 sendError(channel, msg, requestPos, responseType,
17448 anonymousSession.
sessionId = UA_NODEID_GUID(0, UA_GUID_NULL);
17449 anonymousSession.
channel = channel;
17450 session = &anonymousSession;
17454 if(sessionRequired && !session->
activated) {
17456 "Calling service %i on a non-activated session",
17458 sendError(channel, msg, requestPos, responseType,
17467 if(session->
channel != channel) {
17469 "Client tries to use an obsolete securechannel");
17470 sendError(channel, msg, requestPos, responseType,
17479 #ifdef UA_ENABLE_SUBSCRIPTIONS 17490 service(server, session, request, response);
17500 "Could not send the message over the SecureChannel " 17501 "with StatusCode %s", UA_StatusCode_name(retval));
17511 if (UA_TcpErrorMessage_decodeBinary(msg, offset, &errorMessage) !=
UA_STATUSCODE_GOOD) {
17512 connection->
close(connection);
17517 "Client replied with an error message: %s %.*s",
17525 UA_Server_processSecureChannelMessage(UA_Server *server,
UA_SecureChannel *channel,
17530 switch(messagetype) {
17534 "Client replied with an error message: %s %.*s",
17540 "Cannot process a HEL on an open channel");
17544 "Process an OPN on an open channel");
17550 processMSG(server, channel, requestId, message);
17559 "Unknown message type");
17575 "resulted in error code %s", UA_StatusCode_name(retval));
17580 UA_StatusCode retval = UA_TcpMessageHeader_decodeBinary(message, &offset, &tcpMessageHeader);
17582 connection->
close(connection);
17590 "Connection %i | Process ERR message", connection->
sockfd);
17591 processERR(server, connection, message, &offset);
17595 "Connection %i | Process HEL message", connection->
sockfd);
17596 processHEL(connection, message, &offset);
17600 "Connection %i | Process OPN message", connection->
sockfd);
17602 retval = UA_UInt32_decodeBinary(message, &offset, &channelId);
17604 connection->
close(connection);
17607 processOPN(server, connection, channelId, &offsetMessage);
17611 "Connection %i | Processing a MSG message not possible " 17612 "without a SecureChannel", connection->
sockfd);
17613 connection->
close(connection);
17617 "Connection %i | Processing a CLO message not possible " 17618 "without a SecureChannel", connection->
sockfd);
17619 connection->
close(connection);
17623 "Connection %i | Unknown message type", connection->
sockfd);
17624 connection->
close(connection);
17645 if(buflen <= progress + 1 || buf[progress] !=
':') {
17651 size_t progress2 =
UA_readNumber(&buf[progress], buflen - progress, &dim->
max);
17656 if(dim->
min >= dim->
max)
17659 return progress + progress2;
17665 size_t dimensionsMax = 0;
17671 if(idx >= dimensionsMax) {
17679 dimensions = newds;
17680 dimensionsMax = dimensionsMax + 2;
17684 size_t progress = readDimension(&str->
data[offset], str->
length - offset,
17686 if(progress == 0) {
17690 offset += progress;
17694 if(offset >= str->
length)
17697 if(str->
data[offset] !=
',') {
17719 UA_NodeId **typeHierarchy,
size_t *typeHierarchySize) {
17720 size_t results_size = 20;
17725 UA_StatusCode retval = UA_NodeId_copy(&rootRef->nodeId, &results[0]);
17731 const UA_Node *node = rootRef;
17736 for(
size_t i = 0; i < node->referencesSize; ++i) {
17738 if(node->references[i].isInverse != inverse ||
17739 !
UA_NodeId_equal(&hasSubtypeNodeId, &node->references[i].referenceTypeId))
17744 for(
size_t j = 0; j <= last; ++j) {
17745 if(
UA_NodeId_equal(&node->references[i].targetId.nodeId, &results[j])) {
17754 if(last + 1 >= results_size) {
17761 results = new_results;
17766 retval = UA_NodeId_copy(&node->references[i].targetId.nodeId, &results[++last]);
17777 if(!node || node->nodeClass != rootRef->nodeClass)
17786 *typeHierarchy = results;
17787 *typeHierarchySize = last + 1;
17793 const UA_NodeId *referenceTypeIds,
size_t referenceTypeIdsSize) {
17802 for(
size_t i = 0; i < node->referencesSize; ++i) {
17803 if(!node->references[i].isInverse)
17807 for(
size_t j = 0; j < referenceTypeIdsSize; ++j) {
17808 if(
UA_NodeId_equal(&node->references[i].referenceTypeId, &referenceTypeIds[j]) &&
17809 isNodeInTree(ns, &node->references[i].targetId.nodeId, nodeToFind,
17810 referenceTypeIds, referenceTypeIdsSize))
17838 for(
size_t i = 0; i < node->referencesSize; ++i) {
17839 if(node->references[i].isInverse == inverse &&
17841 parentId = &node->references[i].targetId.nodeId;
17853 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17861 const UA_Node *type =
getNodeType(server, (
const UA_Node*)node);
17871 for(
size_t i = 0; i < node->referencesSize; ++i) {
17872 if(node->references[i].isInverse ==
false &&
17875 if(node->references[i].isInverse ==
true &&
17876 UA_NodeId_equal(&node->references[i].referenceTypeId, &hasTypeDefinition))
17887 const void *data) {
17888 #ifndef UA_ENABLE_MULTITHREADING 17892 UA_Node *editNode = (UA_Node*)(uintptr_t)node;
17893 return callback(server, session, editNode, data);
17900 retval = callback(server, session, copy, data);
17953 #define MAXTIMEOUT 50 // max timeout in millisec until the next main loop iteration 17956 processJob(UA_Server *server,
UA_Job *job) {
17959 switch(job->
type) {
17960 case UA_JOBTYPE_NOTHING:
17962 case UA_JOBTYPE_DETACHCONNECTION:
17965 case UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER:
17971 case UA_JOBTYPE_BINARYMESSAGE_ALLOCATED:
17976 case UA_JOBTYPE_METHODCALL:
17977 case UA_JOBTYPE_METHODCALL_DELAYED:
17982 "Trying to execute a job of unknown type");
17992 #ifdef UA_ENABLE_MULTITHREADING 17994 struct MainLoopJob {
17995 struct cds_lfs_node node;
17999 struct DispatchJob {
18000 struct cds_wfcq_node node;
18005 workerLoop(UA_Worker *worker) {
18006 UA_Server *server = worker->server;
18008 volatile UA_Boolean *running = &worker->running;
18012 rcu_register_thread();
18015 struct DispatchJob *dj = (
struct DispatchJob*)
18016 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18018 processJob(server, &dj->job);
18022 pthread_mutex_lock(&server->dispatchQueue_mutex);
18023 pthread_cond_wait(&server->dispatchQueue_condition, &server->dispatchQueue_mutex);
18024 pthread_mutex_unlock(&server->dispatchQueue_mutex);
18026 UA_atomic_add(counter, 1);
18031 rcu_unregister_thread();
18037 dispatchJob(UA_Server *server,
const UA_Job *job) {
18038 struct DispatchJob *dj =
UA_malloc(
sizeof(
struct DispatchJob));
18040 cds_wfcq_node_init(&dj->node);
18041 cds_wfcq_enqueue(&server->dispatchQueue_head, &server->dispatchQueue_tail, &dj->node);
18045 emptyDispatchQueue(UA_Server *server) {
18046 while(!cds_wfcq_empty(&server->dispatchQueue_head, &server->dispatchQueue_tail)) {
18047 struct DispatchJob *dj = (
struct DispatchJob*)
18048 cds_wfcq_dequeue_blocking(&server->dispatchQueue_head, &server->dispatchQueue_tail);
18049 processJob(server, &dj->job);
18084 if(tmpRj->nextTime >= nextTime_max)
18086 if(tmpRj->interval == rj->interval &&
18088 nextTime_max = tmpRj->nextTime;
18093 rj->nextTime = nextTime_max;
18115 rj->interval = interval_dt;
18119 #ifdef UA_ENABLE_MULTITHREADING 18121 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18127 .type = UA_JOBTYPE_METHODCALL,
18128 .job.methodCall = {.data = rj, .method = (void (*)(UA_Server*,
void*))addRepeatedJob}};
18129 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18132 addRepeatedJob(server, rj);
18147 tmp_last.nextTime = current-1;
18153 if(rj->nextTime > current)
18157 #ifdef UA_ENABLE_MULTITHREADING 18158 dispatchJob(server, &rj->job);
18159 *dispatched =
true;
18161 struct RepeatedJob **previousNext = rj->next.le_prev;
18162 processJob(server, &rj->job);
18166 if((
void*)*previousNext != (
void*)rj) {
18168 "The current repeated job removed itself");
18179 rj->nextTime += (
UA_Int64)rj->interval;
18183 if(rj->nextTime < current)
18184 rj->nextTime = current + 1;
18188 if(last_dispatched->nextTime == rj->nextTime) {
18191 UA_assert(last_dispatched != &tmp_last);
18192 prev_rj = last_dispatched;
18195 prev_rj =
LIST_FIRST(&server->repeatedJobs);
18198 if(!n || n->nextTime >= rj->nextTime)
18205 if(prev_rj != rj) {
18211 last_dispatched = rj;
18217 if(first && first->nextTime < next)
18218 next = first->nextTime;
18224 removeRepeatedJob(UA_Server *server,
UA_Guid *jobId) {
18233 #ifdef UA_ENABLE_MULTITHREADING 18239 #ifdef UA_ENABLE_MULTITHREADING 18245 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18247 .type = UA_JOBTYPE_METHODCALL,
18248 .job.methodCall = {.data = idptr, .method = (void (*)(UA_Server*,
void*))removeRepeatedJob}};
18249 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18251 removeRepeatedJob(server, &jobId);
18269 delayed_free(UA_Server *server,
void *data) {
18277 #ifndef UA_ENABLE_MULTITHREADING 18289 dj->job.type = UA_JOBTYPE_METHODCALL;
18290 dj->job.job.methodCall.data = data;
18291 dj->job.job.methodCall.method = callback;
18297 processDelayedCallbacks(UA_Server *server) {
18301 processJob(server, &dj->job);
18308 #define DELAYEDJOBSSIZE 100 // Collect delayed jobs until we have DELAYEDWORKSIZE items 18310 struct DelayedJobs {
18311 struct DelayedJobs *next;
18314 UA_Job jobs[DELAYEDJOBSSIZE];
18318 static void getCounters(UA_Server *server,
struct DelayedJobs *delayed) {
18320 for(
UA_UInt16 i = 0; i < server->config.nThreads; ++i)
18321 counters[i] = server->workers[i].counter;
18322 delayed->workerCounters = counters;
18329 addDelayedJob(UA_Server *server,
UA_Job *job) {
18330 struct DelayedJobs *dj = server->delayedJobs;
18331 if(!dj || dj->jobsCount >= DELAYEDJOBSSIZE) {
18333 dj =
UA_malloc(
sizeof(
struct DelayedJobs));
18336 "Not enough memory to add a delayed job");
18340 dj->workerCounters =
NULL;
18341 dj->next = server->delayedJobs;
18342 server->delayedJobs = dj;
18348 {.method = (void (*)(UA_Server*,
void*))getCounters, .data = dj->next}};
18349 dispatchJob(server, &setCounter);
18352 dj->jobs[dj->jobsCount] = *job;
18357 addDelayedJobAsync(UA_Server *server,
UA_Job *job) {
18358 addDelayedJob(server, job);
18367 j->
type = UA_JOBTYPE_METHODCALL;
18370 struct MainLoopJob *mlw =
UA_malloc(
sizeof(
struct MainLoopJob));
18371 mlw->job = (
UA_Job) {.type = UA_JOBTYPE_METHODCALL, .job.methodCall =
18373 cds_lfs_push(&server->mainLoopJobs, &mlw->node);
18379 dispatchDelayedJobs(UA_Server *server,
void *_) {
18381 struct DelayedJobs *dw = server->delayedJobs, *beforedw = dw;
18387 if(!dw->workerCounters) {
18393 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18394 if(dw->workerCounters[i] == server->workers[i].counter) {
18407 for(
size_t i = 0; i < dw->jobsCount; ++i)
18408 processJob(server, &dw->jobs[i]);
18409 struct DelayedJobs *next = UA_atomic_xchg((
void**)&beforedw->next,
NULL);
18422 #ifdef UA_ENABLE_MULTITHREADING 18423 static void processMainLoopJobs(UA_Server *server) {
18425 struct cds_lfs_head *head = __cds_lfs_pop_all(&server->mainLoopJobs);
18428 struct MainLoopJob *mlw = (
struct MainLoopJob*)&head->node;
18429 struct MainLoopJob *next;
18431 processJob(server, &mlw->job);
18432 next = (
struct MainLoopJob*)mlw->node.next;
18435 }
while((mlw = next));
18440 #ifdef UA_ENABLE_MULTITHREADING 18443 "Spinning up %u worker thread(s)", server->config.nThreads);
18444 pthread_cond_init(&server->dispatchQueue_condition, 0);
18445 pthread_mutex_init(&server->dispatchQueue_mutex, 0);
18446 server->workers =
UA_malloc(server->config.nThreads *
sizeof(UA_Worker));
18447 if(!server->workers)
18449 for(
size_t i = 0; i < server->config.nThreads; ++i) {
18450 UA_Worker *worker = &server->workers[i];
18451 worker->server = server;
18452 worker->counter = 0;
18453 worker->running =
true;
18454 pthread_create(&worker->thr,
NULL, (
void* (*)(
void*))workerLoop, worker);
18458 UA_Job processDelayed = {.
type = UA_JOBTYPE_METHODCALL,
18465 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18467 result |= nl->
start(nl, server->config.logger);
18476 completeMessages(UA_Server *server,
UA_Job *job) {
18483 "Lost message(s) from Connection %i as memory could not be allocated",
18487 "Could not merge half-received messages on Connection %i with error 0x%08x",
18489 job->
type = UA_JOBTYPE_NOTHING;
18493 job->
type = UA_JOBTYPE_BINARYMESSAGE_ALLOCATED;
18497 job->
type = UA_JOBTYPE_NOTHING;
18501 #ifdef UA_ENABLE_MULTITHREADING 18503 processMainLoopJobs(server);
18508 UA_DateTime nextRepeated = processRepeatedJobs(server, now, &dispatched);
18515 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18520 if(i == server->config.networkLayersSize-1)
18521 jobsSize = nl->
getJobs(nl, &jobs, timeout);
18523 jobsSize = nl->
getJobs(nl, &jobs, 0);
18525 for(
size_t k = 0; k < jobsSize; ++k) {
18526 #ifdef UA_ENABLE_MULTITHREADING 18528 if(jobs[k].type == UA_JOBTYPE_METHODCALL_DELAYED) {
18529 addDelayedJob(server, &jobs[k]);
18530 jobs[k].
type = UA_JOBTYPE_NOTHING;
18535 if(jobs[k].type == UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER)
18536 completeMessages(server, &jobs[k]);
18540 for(
size_t j = 0; j < jobsSize; ++j) {
18541 #ifdef UA_ENABLE_MULTITHREADING 18542 dispatchJob(server, &jobs[j]);
18545 processJob(server, &jobs[j]);
18554 #ifdef UA_ENABLE_MULTITHREADING 18557 pthread_cond_broadcast(&server->dispatchQueue_condition);
18559 processDelayedCallbacks(server);
18564 if(nextRepeated > now)
18570 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
18573 size_t stopJobsSize = nl->
stop(nl, &stopJobs);
18574 for(
size_t j = 0; j < stopJobsSize; ++j)
18575 processJob(server, &stopJobs[j]);
18579 #ifdef UA_ENABLE_MULTITHREADING 18581 if(server->workers) {
18583 "Shutting down %u worker thread(s)", server->config.nThreads);
18585 for(
size_t i = 0; i < server->config.nThreads; ++i)
18586 server->workers[i].running =
false;
18587 pthread_cond_broadcast(&server->dispatchQueue_condition);
18588 for(
size_t i = 0; i < server->config.nThreads; ++i)
18589 pthread_join(server->workers[i].thr,
NULL);
18592 server->workers =
NULL;
18596 emptyDispatchQueue(server);
18600 processDelayedCallbacks(server);
18621 #define STARTCHANNELID 1 18622 #define STARTTOKENID 1 18629 cm->currentChannelCount = 0;
18630 cm->server = server;
18644 removeSecureChannelCallback(UA_Server *server,
void *entry) {
18657 "Could not remove the secure channel with error code %s",
18658 UA_StatusCode_name(retval));
18664 UA_atomic_add(&cm->currentChannelCount, (
UA_UInt32)-1);
18675 if(timeout < nowMonotonic || !entry->channel.
connection) {
18677 "SecureChannel has timed out");
18678 removeSecureChannel(cm, entry);
18691 "Channel was purged since maxSecureChannels was " 18692 "reached and channel had no session attached");
18693 removeSecureChannel(cm, entry);
18710 if(cm->currentChannelCount >= cm->server->config.maxSecureChannels && !purgeFirstChannelWithoutSession(cm)){
18743 UA_atomic_add(&cm->currentChannelCount, 1);
18769 UA_ByteString_deleteMembers(&channel->
clientNonce);
18801 return removeSecureChannel(cm, entry);
18814 sm->currentSessionCount = 0;
18815 sm->server = server;
18830 removeSessionCallback(UA_Server *server,
void *entry) {
18839 sentry->session.activated =
false;
18846 "Could not remove session with error code %s",
18847 UA_StatusCode_name(retval));
18853 UA_atomic_add(&sm->currentSessionCount, (
UA_UInt32)-1);
18863 if(sentry->session.validTill >= nowMonotonic)
18866 "Session has timed out");
18867 removeSession(sm, sentry);
18882 "Client tries to use a session that has timed out");
18887 return ¤t->session;
18901 if(sm->currentSessionCount >= sm->server->config.maxSessions)
18908 UA_atomic_add(&sm->currentSessionCount, 1);
18910 newentry->session.sessionId = UA_NODEID_GUID(1,
UA_Guid_random());
18911 newentry->session.authenticationToken = UA_NODEID_GUID(1,
UA_Guid_random());
18917 newentry->session.timeout = sm->server->config.maxSessionTimeout;
18921 *session = &newentry->session;
18934 return removeSession(sm, current);
18946 UA_NodeId_deleteMembers(&node->nodeId);
18947 UA_QualifiedName_deleteMembers(&node->browseName);
18948 UA_LocalizedText_deleteMembers(&node->displayName);
18949 UA_LocalizedText_deleteMembers(&node->description);
18952 node->references =
NULL;
18953 node->referencesSize = 0;
18956 switch(node->nodeClass) {
18966 UA_NodeId_deleteMembers(&p->dataType);
18969 p->arrayDimensions =
NULL;
18970 p->arrayDimensionsSize = 0;
18972 UA_DataValue_deleteMembers(&p->value.data.value);
18999 src->arrayDimensionsSize,
19000 (
void**)&dst->arrayDimensions,
19004 dst->arrayDimensionsSize = src->arrayDimensionsSize;
19005 retval = UA_NodeId_copy(&src->dataType, &dst->dataType);
19006 dst->valueRank = src->valueRank;
19007 dst->valueSource = src->valueSource;
19009 retval |= UA_DataValue_copy(&src->value.data.value,
19010 &dst->value.data.value);
19011 dst->value.data.callback = src->value.data.callback;
19013 dst->value.dataSource = src->value.dataSource;
19019 UA_StatusCode retval = UA_CommonVariableNode_copy(src, dst);
19032 dst->isAbstract = src->isAbstract;
19076 if(src->nodeClass != dst->nodeClass)
19080 UA_StatusCode retval = UA_NodeId_copy(&src->nodeId, &dst->nodeId);
19081 dst->nodeClass = src->nodeClass;
19082 retval |= UA_QualifiedName_copy(&src->browseName, &dst->browseName);
19083 retval |= UA_LocalizedText_copy(&src->displayName, &dst->displayName);
19084 retval |= UA_LocalizedText_copy(&src->description, &dst->description);
19085 dst->writeMask = src->writeMask;
19086 dst->userWriteMask = src->userWriteMask;
19091 retval |=
UA_Array_copy(src->references, src->referencesSize,
19092 (
void**)&dst->references,
19098 dst->referencesSize = src->referencesSize;
19101 switch(src->nodeClass) {
19150 #ifndef UA_ENABLE_MULTITHREADING 19152 #define UA_NODESTORE_MINSIZE 64 19159 #define UA_NODESTORE_TOMBSTONE ((UA_NodeStoreEntry*)0x01) 19171 7, 13, 31, 61, 127, 251,
19172 509, 1021, 2039, 4093, 8191, 16381,
19173 32749, 65521, 131071, 262139, 524287, 1048573,
19174 2097143, 4194301, 8388593, 16777213, 33554393, 67108859,
19175 134217689, 268435399, 536870909, 1073741789, 2147483647, 4294967291
19185 while(low != high) {
19187 if(n > primes[mid])
19198 switch(nodeClass) {
19229 entry->
node.nodeClass = nodeClass;
19298 UA_UInt32 nindex = higher_prime_index(count * 2);
19309 for(
size_t i = 0, j = 0; i < osize && j < count; ++i) {
19348 deleteEntry(entries[i]);
19359 return &entry->
node;
19366 deleteEntry(entry);
19377 tempNodeid = node->nodeId;
19382 if(node->nodeId.namespaceIndex == 0)
19383 node->nodeId.namespaceIndex = 1;
19386 UA_UInt32 increase = mod2(identifier, size);
19388 node->nodeId.identifier.numeric = identifier;
19389 entry = findSlot(ns, &node->nodeId);
19392 identifier += increase;
19393 if(identifier >= size)
19394 identifier -= size;
19397 entry = findSlot(ns, &node->nodeId);
19416 if(*entry != newEntry->
orig) {
19418 deleteEntry(newEntry);
19421 deleteEntry(*entry);
19431 return (
const UA_Node*)&(*entry)->node;
19456 deleteEntry(*slot);
19482 #ifdef UA_ENABLE_MULTITHREADING 19483 #include <urcu/rculfhash.h> 19486 struct cds_lfht_node htn;
19487 struct rcu_head rcu_head;
19488 struct nodeEntry *orig;
19492 static struct nodeEntry * instantiateEntry(
UA_NodeClass class) {
19493 size_t size =
sizeof(
struct nodeEntry) - sizeof(UA_Node);
19522 struct nodeEntry *entry =
UA_calloc(1, size);
19525 entry->node.nodeClass =
class;
19529 static void deleteEntry(
struct rcu_head *head) {
19530 struct nodeEntry *entry =
container_of(head,
struct nodeEntry, rcu_head);
19536 static int compare(
struct cds_lfht_node *htn,
const void *orig) {
19539 const UA_NodeId *newid = &((
struct nodeEntry *)htn)->node.nodeId;
19545 return (
UA_NodeStore*)cds_lfht_new(64, 64, 0, CDS_LFHT_AUTO_RESIZE,
NULL);
19551 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19552 struct cds_lfht_iter iter;
19553 cds_lfht_first(ht, &iter);
19555 if(!cds_lfht_del(ht, iter.node)) {
19557 struct nodeEntry *entry = (
struct nodeEntry*) iter.
node;
19558 call_rcu(&entry->rcu_head, deleteEntry);
19560 cds_lfht_next(ht, &iter);
19563 cds_lfht_destroy(ht,
NULL);
19568 struct nodeEntry *entry = instantiateEntry(
class);
19571 return (UA_Node*)&entry->node;
19575 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19576 deleteEntry(&entry->rcu_head);
19581 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19582 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19583 cds_lfht_node_init(&entry->htn);
19584 struct cds_lfht_node *result;
19587 tempNodeid = node->nodeId;
19591 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19593 if(result != &entry->htn) {
19594 deleteEntry(&entry->rcu_head);
19600 if(node->nodeId.namespaceIndex == 0)
19601 node->nodeId.namespaceIndex = 1;
19603 unsigned long identifier;
19604 long before, after;
19605 cds_lfht_count_nodes(ht, &before, &identifier, &after);
19608 node->nodeId.identifier.numeric = (
UA_UInt32)identifier;
19611 result = cds_lfht_add_unique(ht, h, compare, &node->nodeId, &entry->htn);
19612 if(result == &entry->htn)
19614 node->nodeId.identifier.numeric += (
UA_UInt32)(identifier * 2654435761);
19622 struct nodeEntry *entry =
container_of(node,
struct nodeEntry, node);
19623 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19627 struct cds_lfht_iter iter;
19628 cds_lfht_lookup(ht, h, compare, &node->nodeId, &iter);
19633 struct nodeEntry *oldEntry = (
struct nodeEntry*)iter.node;
19634 if(oldEntry != entry->orig) {
19635 deleteEntry(&entry->rcu_head);
19639 cds_lfht_node_init(&entry->htn);
19640 if(cds_lfht_replace(ht, &iter, h, compare, &node->nodeId, &entry->htn) != 0) {
19642 deleteEntry(&entry->rcu_head);
19647 call_rcu(&oldEntry->rcu_head, deleteEntry);
19653 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19655 struct cds_lfht_iter iter;
19656 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19657 if(!iter.node || cds_lfht_del(ht, iter.node) != 0)
19659 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19660 call_rcu(&entry->rcu_head, deleteEntry);
19666 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19668 struct cds_lfht_iter iter;
19669 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19670 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19673 return &found_entry->node;
19678 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19680 struct cds_lfht_iter iter;
19681 cds_lfht_lookup(ht, h, compare, nodeid, &iter);
19682 struct nodeEntry *entry = (
struct nodeEntry*)iter.
node;
19685 struct nodeEntry *
new = instantiateEntry(entry->node.nodeClass);
19689 deleteEntry(&new->rcu_head);
19698 struct cds_lfht *ht = (
struct cds_lfht*)ns;
19699 struct cds_lfht_iter iter;
19700 cds_lfht_first(ht, &iter);
19701 while(iter.node !=
NULL) {
19702 struct nodeEntry *found_entry = (
struct nodeEntry*)iter.node;
19703 visitor(&found_entry->node);
19704 cds_lfht_next(ht, &iter);
19727 UA_ApplicationDescription_copy(&server->config.applicationDescription, descr);
19738 UA_ApplicationDescription_delete(descr);
19746 for(
size_t i = 0; i < server->config.networkLayersSize; ++i) {
19760 if(endpointUrl->
length > 0) {
19761 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with endpointUrl " \
19764 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing GetEndpointsRequest with an empty endpointUrl");
19774 size_t relevant_count = 0;
19777 relevant_endpoints[j] =
true;
19784 relevant_endpoints[j] =
true;
19791 if(relevant_count == 0) {
19797 size_t clone_times = 1;
19799 if(endpointUrl->
length == 0) {
19800 clone_times = server->config.networkLayersSize;
19801 nl_endpointurl =
true;
19813 for(
size_t i = 0; i < clone_times; ++i) {
19815 endpointUrl = &server->config.networkLayers[i].discoveryUrl;
19817 if(!relevant_endpoints[j])
19851 "Connection %i | SecureChannel %i | OpenSecureChannel: Opened SecureChannel",
19855 "Connection %i | OpenSecureChannel: Opening a SecureChannel failed",
19864 "Connection %i | SecureChannel %i | OpenSecureChannel: SecureChannel renewed",
19868 "Connection %i | OpenSecureChannel: Renewing SecureChannel failed",
19907 UA_Session *newSession;
19911 UA_LOG_DEBUG_CHANNEL(server->config.logger, channel,
"Processing CreateSessionRequest failed");
19938 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19947 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: SecureChannel %i wants " 19963 if(server->config.enableAnonymousLogin &&
19971 }
else if(server->config.enableUsernamePasswordLogin &&
19993 for(
size_t i = 0; i < server->config.usernamePasswordLoginsSize; ++i) {
19994 UA_String *user = &server->config.usernamePasswordLogins[i].username;
19995 UA_String *pw = &server->config.usernamePasswordLogins[i].password;
20003 "ActivateSession: Did not find matching username/password");
20015 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Detach from old channel");
20023 UA_LOG_INFO_SESSION(server->config.logger, session,
"ActivateSession: Session activated");
20040 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20047 UA_Variant_init(v);
20049 v->
data = (
void*)(uintptr_t)p;
20077 compatibleValueRankArrayDimensions(
UA_Int32 valueRank,
size_t arrayDimensionsSize) {
20078 switch(valueRank) {
20080 if(arrayDimensionsSize > 1)
20086 if(arrayDimensionsSize > 0)
20090 if(arrayDimensionsSize < 1)
20098 if(arrayDimensionsSize != (
size_t)valueRank)
20112 if(!UA_Variant_isScalar(value))
20114 return compatibleValueRankArrayDimensions(valueRank, arrayDims);
20119 const UA_UInt32 *constraintArrayDimensions,
20120 size_t testArrayDimensionsSize,
20121 const UA_UInt32 *testArrayDimensions) {
20123 if(constraintArrayDimensionsSize == 0) {
20128 if(testArrayDimensionsSize != constraintArrayDimensionsSize)
20132 for(
size_t i = 0; i < constraintArrayDimensionsSize; ++i) {
20133 if(constraintArrayDimensions[i] != testArrayDimensions[i] &&
20134 constraintArrayDimensions[i] != 0)
20143 convertToMatchingValue(UA_Server *server,
const UA_Variant *value,
20146 if(!targetDataType)
20153 UA_Variant_isScalar(value)) {
20159 return editableValue;
20167 *editableValue = *value;
20169 editableValue->
type = targetDataType;
20170 return editableValue;
20186 UA_Int32 targetValueRank,
size_t targetArrayDimensionsSize,
20207 value = convertToMatchingValue(server, value, targetDataTypeId, editableValue);
20218 if(valueArrayDimensions == 0 && !UA_Variant_isScalar(value)) {
20219 valueArrayDimensionsSize = 1;
20221 valueArrayDimensions = &tempArrayDimensions;
20226 if(targetArrayDimensionsSize > 0)
20228 valueArrayDimensionsSize, valueArrayDimensions);
20231 return compatibleValueRankValue(targetValueRank, value);
20248 writeArrayDimensionsAttribute(UA_Server *server,
UA_VariableNode *node,
20249 size_t arrayDimensionsSize,
UA_UInt32 *arrayDimensions) {
20257 UA_StatusCode retval = compatibleValueRankArrayDimensions(node->valueRank, arrayDimensionsSize);
20260 "The current value rank does not match the new array dimensions");
20271 if(vt->arrayDimensions) {
20273 arrayDimensionsSize, arrayDimensions);
20276 "Array dimensions in the variable type do not match");
20283 UA_DataValue_init(&value);
20291 UA_DataValue_deleteMembers(&value);
20294 "Array dimensions in the current value do not match");
20300 UA_UInt32 *oldArrayDimensions = node->arrayDimensions;
20301 retval =
UA_Array_copy(arrayDimensions, arrayDimensionsSize,
20306 node->arrayDimensionsSize = arrayDimensionsSize;
20315 writeValueRankAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20333 switch(constraintValueRank) {
20335 if(valueRank != -1 && valueRank != 1)
20341 if(valueRank != -1)
20349 if(valueRank != constraintValueRank)
20356 size_t arrayDims = node->arrayDimensionsSize;
20358 if(arrayDims == 0) {
20362 UA_DataValue_init(&value);
20368 if(!UA_Variant_isScalar(&value.
value))
20370 UA_DataValue_deleteMembers(&value);
20372 retval = compatibleValueRankArrayDimensions(valueRank, arrayDims);
20378 node->valueRank = valueRank;
20387 writeDataTypeAttributeWithVT(UA_Server *server,
UA_VariableNode *node,
20408 constraintDataType, &subtypeId, 1))
20413 UA_DataValue_init(&value);
20419 node->arrayDimensionsSize, node->arrayDimensions,
20421 UA_DataValue_deleteMembers(&value);
20424 "The current value does not match the new data type");
20431 retval = UA_NodeId_copy(dataType, &node->dataType);
20433 node->dataType = dtCopy;
20436 UA_NodeId_deleteMembers(&dtCopy);
20447 if(vn->value.data.callback.onRead) {
20449 vn->value.data.callback.onRead(vn->value.data.callback.handle,
20450 vn->nodeId, &vn->value.data.value.value, rangeptr);
20452 #ifdef UA_ENABLE_MULTITHREADING 20459 *v = vn->value.data.value;
20468 if(!vn->value.dataSource.read)
20475 vn->value.dataSource.read(vn->value.dataSource.handle, vn->nodeId,
20476 sourceTimeStamp, rangeptr, v);
20482 readValueAttributeComplete(UA_Server *server,
const UA_VariableNode *vn,
20489 if(indexRange && indexRange->
length > 0) {
20498 retval = readValueAttributeFromNode(server, vn, v, rangeptr);
20500 retval = readValueAttributeFromDataSource(vn, v, timestamps, rangeptr);
20516 UA_StatusCode retval = UA_DataValue_copy(value, &node->value.data.value);
20518 UA_DataValue_deleteMembers(&old_value);
20520 node->value.data.value = old_value;
20528 if(value->
status != node->value.data.value.status ||
20529 !value->
hasValue || !node->value.data.value.hasValue)
20535 if(UA_Variant_isScalar(&value->
value)) {
20536 editableValue = value->
value;
20538 v = &editableValue;
20548 node->value.data.value.hasStatus = value->
hasStatus;
20549 node->value.data.value.status = value->
status;
20564 if(indexRange && indexRange->
length > 0) {
20578 retval =
typeCheckValue(server, &node->dataType, node->valueRank,
20579 node->arrayDimensionsSize, node->arrayDimensions,
20580 &value->
value, rangeptr, &editableValue.
value);
20594 retval = writeValueAttributeWithoutRange(node, &editableValue);
20596 retval = writeValueAttributeWithRange(node, &editableValue, rangeptr);
20601 #ifdef UA_ENABLE_MULTITHREADING 20605 writtenNode = node;
20609 writtenNode->value.data.callback.onWrite(writtenNode->value.data.callback.handle,
20610 writtenNode->nodeId,
20611 &writtenNode->value.data.value.value, rangeptr);
20615 if(node->value.dataSource.write) {
20617 retval = node->value.dataSource.write(node->value.dataSource.handle,
20618 node->nodeId, &editableValue.
value, rangeptr);
20637 readIsAbstractAttribute(
const UA_Node *node,
UA_Variant *v) {
20639 switch(node->nodeClass) {
20660 writeIsAbstractAttribute(UA_Node *node,
UA_Boolean value) {
20661 switch(node->nodeClass) {
20684 static const UA_String binEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
20687 #define CHECK_NODECLASS(CLASS) \ 20688 if(!(node->nodeClass & (CLASS))) { \ 20689 retval = UA_STATUSCODE_BADATTRIBUTEIDINVALID; \ 20738 forceVariantSetScalar(&v->
value, &node->description, &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20744 forceVariantSetScalar(&v->
value, &node->userWriteMask, &
UA_TYPES[UA_TYPES_UINT32]);
20747 retval = readIsAbstractAttribute(node, &v->
value);
20757 &
UA_TYPES[UA_TYPES_LOCALIZEDTEXT]);
20761 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->containsNoLoops,
20766 forceVariantSetScalar(&v->
value, &((
const UA_ViewNode*)node)->eventNotifier,
20771 retval = readValueAttributeComplete(server, (
const UA_VariableNode*)node,
20786 retval = readArrayDimensionsAttribute((
const UA_VariableNode*)node, v);
20873 if(request->
maxAge < 0) {
20878 for(
size_t i = 0;i < size;++i) {
20883 #ifdef UA_ENABLE_NONSTANDARD_STATELESS 20889 UA_ExtensionObject_init(&additionalHeader);
20894 UA_Variant_init(&variant);
20899 variant.
data = expireArray;
20930 UA_DataValue_init(&dv);
20944 UA_ReadValueId_init(&item);
20956 UA_DataValue_deleteMembers(&dv);
20965 retval = UA_Variant_copy(&dv.
value, v);
20990 #define CHECK_DATATYPE_SCALAR(EXP_DT) \ 20991 if(!wvalue->value.hasValue || \ 20992 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 20993 !UA_Variant_isScalar(&wvalue->value.value)) { \ 20994 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 20998 #define CHECK_DATATYPE_ARRAY(EXP_DT) \ 20999 if(!wvalue->value.hasValue || \ 21000 &UA_TYPES[UA_TYPES_##EXP_DT] != wvalue->value.value.type || \ 21001 UA_Variant_isScalar(&wvalue->value.value)) { \ 21002 retval = UA_STATUSCODE_BADTYPEMISMATCH; \ 21006 #define CHECK_NODECLASS_WRITE(CLASS) \ 21007 if((node->nodeClass & (CLASS)) == 0) { \ 21008 retval = UA_STATUSCODE_BADNODECLASSINVALID; \ 21015 CopyAttributeIntoNode(UA_Server *server, UA_Session *session,
21026 UA_QualifiedName_deleteMembers(&node->browseName);
21027 UA_QualifiedName_copy(value, &node->browseName);
21031 UA_LocalizedText_deleteMembers(&node->displayName);
21032 UA_LocalizedText_copy(value, &node->displayName);
21036 UA_LocalizedText_deleteMembers(&node->description);
21037 UA_LocalizedText_copy(value, &node->description);
21041 node->writeMask = *(
const UA_UInt32*)value;
21045 node->userWriteMask = *(
const UA_UInt32*)value;
21049 retval = writeIsAbstractAttribute(node, *(
const UA_Boolean*)value);
21090 retval = writeArrayDimensionsAttribute(server, (
UA_VariableNode*)node,
21130 "WriteRequest returned status code %s",
21131 UA_StatusCode_name(retval));
21173 const void *attr) {
21175 UA_WriteValue_init(&wvalue);
21176 wvalue.
nodeId = *nodeId;
21200 addReference(UA_Server *server, UA_Session *session,
21204 deleteReference(UA_Server *server, UA_Session *session,
21208 deleteNode(UA_Server *server, UA_Session *session,
21219 checkParentReference(UA_Server *server, UA_Session *session,
UA_NodeClass nodeClass,
21230 "AddNodes: Parent node not found");
21237 if(!referenceType) {
21239 "AddNodes: Reference type to the parent not found");
21246 "AddNodes: Reference type to the parent invalid");
21253 "AddNodes: Abstract reference type to the parent not allowed");
21266 "AddNodes: New type node need to have a " 21267 "HasSubType reference");
21271 if(parent->nodeClass != nodeClass) {
21273 "AddNodes: New type node needs to be of the same " 21274 "node type as the parent");
21281 const UA_NodeId hierarchicalReference =
21284 &hierarchicalReference, &subtypeId, 1)) {
21286 "AddNodes: Reference type is not hierarchical");
21298 Service_AddNodes_single(UA_Server *server, UA_Session *session,
21300 UA_InstantiationCallback *instantiationCallback);
21303 copyChildNodesToNode(UA_Server *server, UA_Session *session,
21305 UA_InstantiationCallback *instantiationCallback);
21310 copyExistingVariable(UA_Server *server, UA_Session *session,
const UA_NodeId *variable,
21312 UA_InstantiationCallback *instantiationCallback) {
21322 UA_DataValue_init(&value);
21329 UA_VariableAttributes_init(&attr);
21345 UA_AddNodesItem_init(&item);
21362 UA_AddNodesResult_init(&res);
21363 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21368 retval = copyChildNodesToNode(server, session, &node->nodeId,
21372 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21373 instantiationCallback->handle);
21378 UA_Variant_deleteMembers(&value.
value);
21385 copyExistingObject(UA_Server *server, UA_Session *session,
const UA_NodeId *
object,
21387 UA_InstantiationCallback *instantiationCallback) {
21397 UA_ObjectAttributes_init(&attr);
21405 UA_AddNodesItem_init(&item);
21420 UA_AddNodesResult_init(&res);
21421 Service_AddNodes_single(server, session, &item, &res, instantiationCallback);
21427 UA_StatusCode retval = copyChildNodesToNode(server, session, &node->nodeId,
21430 instantiationCallback->method(res.
addedNodeId, node->nodeId,
21431 instantiationCallback->handle);
21438 setObjectInstanceHandle(UA_Server *server, UA_Session *session,
21448 instantiateNode(UA_Server *server, UA_Session *session,
const UA_NodeId *nodeId,
21450 UA_InstantiationCallback *instantiationCallback) {
21469 size_t hierarchySize = 0;
21476 for(
size_t i = 0; i < hierarchySize; ++i)
21477 retval |= copyChildNodesToNode(server, session, &hierarchy[i], nodeId, instantiationCallback);
21484 const UA_ObjectLifecycleManagement *olm =
21486 if(olm->constructor)
21494 UA_AddReferencesItem_init(&addref);
21499 return addReference(server, session, &addref);
21505 instanceFindAggregateByBrowsename(UA_Server *server, UA_Session *session,
21510 UA_BrowseDescription_init(&bd);
21511 bd.
nodeId = *searchInstance;
21519 UA_BrowseResult_init(&br);
21529 retval = UA_NodeId_copy(&rd->
nodeId.
nodeId, outInstanceNodeId);
21534 UA_BrowseResult_deleteMembers(&br);
21539 mandatoryChild(UA_Server *server, UA_Session *session,
const UA_NodeId *childNodeId) {
21549 for(
size_t i = 0; i < child->referencesSize; ++i) {
21570 copyChildNodesToNode(UA_Server* server, UA_Session* session,
21572 UA_InstantiationCallback* instantiationCallback) {
21575 UA_BrowseDescription_init(&bd);
21576 bd.
nodeId = *sourceNodeId;
21585 UA_BrowseResult_init(&br);
21597 if(!mandatoryChild(server, session, &rd->
nodeId.
nodeId))
21604 retval = instanceFindAggregateByBrowsename(server, session, destinationNodeId,
21614 UA_AddReferencesItem_init(&newItem);
21620 retval = addReference(server, session, &newItem);
21622 retval = copyExistingVariable(server, session, &rd->
nodeId.
nodeId,
21624 instantiationCallback);
21626 retval = copyExistingObject(server, session, &rd->
nodeId.
nodeId,
21628 instantiationCallback);
21641 retval = copyChildNodesToNode(server, session, &rd->
nodeId.
nodeId,
21642 &existingChild, instantiationCallback);
21644 UA_NodeId_deleteMembers(&existingChild);
21649 UA_BrowseResult_deleteMembers(&br);
21657 UA_InstantiationCallback *instantiationCallback,
21669 UA_StatusCode retval = checkParentReference(server, session, node->nodeClass,
21670 parentNodeId, referenceTypeId);
21673 "AddNodes: Checking the reference to the parent returned " 21674 "error code %s", UA_StatusCode_name(retval));
21683 "AddNodes: Node could not be added to the nodestore " 21684 "with error code %s", UA_StatusCode_name(retval));
21690 retval = UA_NodeId_copy(&node->nodeId, addedNodeId);
21693 "AddNodes: Could not copy the nodeid");
21701 UA_AddReferencesItem_init(&item);
21706 retval = addReference(server, session, &item);
21709 "AddNodes: Could not add the reference to the parent" 21710 "with error code %s", UA_StatusCode_name(retval));
21722 typeDefinition = &basedatavariabletype;
21724 typeDefinition = &baseobjecttype;
21728 retval = instantiateNode(server, session, &node->nodeId, node->nodeClass,
21729 typeDefinition, instantiationCallback);
21732 "AddNodes: Could not instantiate the node with" 21733 "error code %s", UA_StatusCode_name(retval));
21739 if(instantiationCallback)
21740 instantiationCallback->method(node->nodeId, *typeDefinition,
21741 instantiationCallback->handle);
21745 deleteNode(server, &adminSession, &node->nodeId,
true);
21758 retval |= UA_QualifiedName_copy(&item->
browseName, &node->browseName);
21759 retval |= UA_LocalizedText_copy(&attr->
displayName, &node->displayName);
21760 retval |= UA_LocalizedText_copy(&attr->
description, &node->description);
21767 copyCommonVariableAttributes(UA_Server *server,
UA_VariableNode *node,
21774 typeDef = &basedatavartype;
21781 node->valueRank = -2;
21796 retval = UA_NodeId_copy(&vt->dataType, &node->dataType);
21809 "Array dimensions incompatible with the VariableType " 21810 "with error code %s", UA_StatusCode_name(retval));
21819 node->valueRank = vt->valueRank;
21822 "Value Rank incompatible with the VariableType " 21823 "with error code %s", UA_StatusCode_name(retval));
21829 UA_DataValue_init(&value);
21839 "Could not read the value of the variable type " 21840 "with error code %s", UA_StatusCode_name(retval));
21849 "Could not set the value of the new node " 21850 "with error code %s", UA_StatusCode_name(retval));
21852 UA_DataValue_deleteMembers(&value);
21857 copyVariableNodeAttributes(UA_Server *server,
UA_VariableNode *vnode,
21864 return copyCommonVariableAttributes(server, vnode, item, attr);
21872 return copyCommonVariableAttributes(server, (
UA_VariableNode*)vtnode, item,
21911 #define CHECK_ATTRIBUTES(TYPE) \ 21912 if(item->nodeAttributes.content.decoded.type != &UA_TYPES[UA_TYPES_##TYPE]) { \ 21913 retval = UA_STATUSCODE_BADNODEATTRIBUTESINVALID; \ 21918 createNodeFromAttributes(UA_Server *server,
const UA_AddNodesItem *item, UA_Node **newNode) {
21932 UA_StatusCode retval = copyStandardAttributes(node, item, data);
21936 retval |= copyObjectNodeAttributes(node, data);
21940 retval |= copyVariableNodeAttributes(server, node, item, data);
21944 retval |= copyObjectTypeNodeAttributes(node, data);
21948 retval |= copyVariableTypeNodeAttributes(server, node, item, data);
21952 retval |= copyReferenceTypeNodeAttributes(node, data);
21956 retval |= copyDataTypeNodeAttributes(node, data);
21960 retval |= copyViewNodeAttributes(node, data);
21976 Service_AddNodes_single(UA_Server *server, UA_Session *session,
21978 UA_InstantiationCallback *instantiationCallback) {
21980 UA_Node *node =
NULL;
21981 result->
statusCode = createNodeFromAttributes(server, item, &node);
21984 "Could not add node with error code %s",
21996 "Could not add node with error code %s",
22019 for(
size_t i = 0; i < size; ++i) {
22020 Service_AddNodes_single(server, session, &request->
nodesToAdd[i],
22031 UA_InstantiationCallback *instantiationCallback,
UA_NodeId *outNewNodeId) {
22034 UA_AddNodesItem_init(&item);
22043 .content.decoded = {attributeType, (
void*)(uintptr_t)attr}};
22047 UA_AddNodesResult_init(&result);
22049 Service_AddNodes_single(server, &adminSession, &item, &result, instantiationCallback);
22079 UA_DataValue_init(&value);
22080 if(dataSource.read)
22081 retval = dataSource.read(dataSource.handle, requestedNewNodeId,
22082 false,
NULL, &value);
22095 UA_AddNodesItem_init(&item);
22100 retval |= copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&editAttr);
22101 retval |= copyVariableNodeAttributes(server, node, &item, &editAttr);
22102 UA_DataValue_deleteMembers(&node->value.data.value);
22104 node->value.dataSource = dataSource;
22105 UA_DataValue_deleteMembers(&value);
22114 UA_AddNodesResult_init(&result);
22116 &referenceTypeId, &typeDefinition,
NULL, outNewNodeId);
22121 #ifdef UA_ENABLE_METHODCALLS 22124 UA_Server_addMethodNode(UA_Server *server,
const UA_NodeId requestedNewNodeId,
22127 UA_MethodCallback method,
void *handle,
22128 size_t inputArgumentsSize,
const UA_Argument* inputArguments,
22129 size_t outputArgumentsSize,
const UA_Argument* outputArguments,
22136 UA_AddNodesItem_init(&item);
22139 copyStandardAttributes((UA_Node*)node, &item, (
const UA_NodeAttributes*)&attr);
22140 node->executable = attr.executable;
22141 node->userExecutable = attr.userExecutable;
22142 node->attachedMethod = method;
22143 node->methodHandle = handle;
22147 UA_NodeId_init(&newMethodId);
22150 &referenceTypeId, &UA_NODEID_NULL,
NULL, &newMethodId);
22158 if(inputArgumentsSize > 0) {
22160 inputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22161 inputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"InputArguments");
22162 inputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22163 inputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"InputArguments");
22164 inputArgumentsVariableNode->valueRank = 1;
22175 inputArgumentsVariableNode->nodeId =
22179 inputArguments, inputArgumentsSize,
22181 inputArgumentsVariableNode->value.data.value.hasValue =
true;
22185 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22189 if(outputArgumentsSize > 0) {
22192 outputArgumentsVariableNode->nodeId.namespaceIndex = newMethodId.
namespaceIndex;
22193 outputArgumentsVariableNode->browseName = UA_QUALIFIEDNAME_ALLOC(0,
"OutputArguments");
22194 outputArgumentsVariableNode->displayName = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22195 outputArgumentsVariableNode->description = UA_LOCALIZEDTEXT_ALLOC(
"en_US",
"OutputArguments");
22196 outputArgumentsVariableNode->valueRank = 1;
22201 outputArgumentsVariableNode->nodeId =
22205 outputArguments, outputArgumentsSize,
22207 outputArgumentsVariableNode->value.data.value.hasValue =
true;
22211 &newMethodId, &hasproperty, &propertytype,
NULL,
NULL);
22216 *outNewNodeId = newMethodId;
22218 UA_NodeId_deleteMembers(&newMethodId);
22229 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22234 addOneWayReference(UA_Server *server, UA_Session *session,
22236 size_t i = node->referencesSize;
22237 size_t refssize = (i+1) | 3;
22241 node->references = new_refs;
22242 UA_ReferenceNode_init(&new_refs[i]);
22247 node->referencesSize = i+1;
22249 UA_ReferenceNode_deleteMembers(&new_refs[i]);
22254 addReference(UA_Server *server, UA_Session *session,
22271 UA_AddReferencesItem_init(&secondItem);
22300 "Processing AddReferencesRequest");
22313 for(
size_t i = 0; i < response->
resultsSize; ++i)
22323 UA_AddReferencesItem_init(&item);
22329 UA_StatusCode retval = addReference(server, &adminSession, &item);
22339 removeReferences(UA_Server *server, UA_Session *session,
const UA_Node *node) {
22341 UA_DeleteReferencesItem_init(&item);
22343 for(
size_t i = 0; i < node->referencesSize; ++i) {
22344 item.
isForward = node->references[i].isInverse;
22345 item.
sourceNodeId = node->references[i].targetId.nodeId;
22347 deleteReference(server, session, &item);
22352 deleteNode(UA_Server *server, UA_Session *session,
22371 if(deleteReferences)
22372 removeReferences(server, session, node);
22381 "Processing DeleteNodesRequest");
22396 response->
results[i] = deleteNode(server, session, &item->
nodeId,
22406 &nodeId, deleteReferences);
22417 deleteOneWayReference(UA_Server *server, UA_Session *session, UA_Node *node,
22420 for(
size_t i = node->referencesSize; i > 0; --i) {
22428 UA_ReferenceNode_deleteMembers(ref);
22430 node->references[i-1] = node->references[node->referencesSize-1];
22431 --node->referencesSize;
22438 if(node->referencesSize == 0 && node->references) {
22440 node->references =
NULL;
22446 deleteReference(UA_Server *server, UA_Session *session,
22455 UA_DeleteReferencesItem_init(&secondItem);
22469 "Processing DeleteReferencesRequest");
22499 UA_StatusCode retval = deleteReference(server, &adminSession, &item);
22509 setValueCallback(UA_Server *server, UA_Session *session,
22513 node->value.data.callback = *callback;
22519 const UA_ValueCallback callback) {
22532 setDataSource(UA_Server *server, UA_Session *session,
22537 UA_DataValue_deleteMembers(&node->value.data.value);
22538 node->value.dataSource = *dataSource;
22545 const UA_DataSource dataSource) {
22558 setOLM(UA_Server *server, UA_Session *session,
22568 UA_ObjectLifecycleManagement olm) {
22580 #ifdef UA_ENABLE_METHODCALLS 22582 struct addMethodCallback {
22583 UA_MethodCallback callback;
22588 editMethodCallback(UA_Server *server, UA_Session* session,
22589 UA_Node* node,
const void* handle) {
22592 const struct addMethodCallback *newCallback = handle;
22600 UA_Server_setMethodNode_callback(UA_Server *server,
const UA_NodeId methodNodeId,
22601 UA_MethodCallback method,
void *handle) {
22602 struct addMethodCallback cb = { method, handle };
22605 &methodNodeId, editMethodCallback, &cb);
22622 UA_ReferenceDescription_init(descr);
22629 retval |= UA_NodeClass_copy(&curr->nodeClass, &descr->
nodeClass);
22631 retval |= UA_QualifiedName_copy(&curr->browseName, &descr->
browseName);
22633 retval |= UA_LocalizedText_copy(&curr->displayName, &descr->
displayName);
22636 for(
size_t i = 0; i < curr->referencesSize; ++i) {
22651 static const UA_Node *
22664 for(
size_t i = 0; i < relevant_count; ++i) {
22666 is_relevant =
true;
22679 *isExternal =
false;
22685 UA_ByteString_deleteMembers(&cp->identifier);
22686 UA_BrowseDescription_deleteMembers(&cp->browseDescription);
22706 size_t referencesCount = 0;
22707 size_t referencesIndex = 0;
22711 descr = &cp->browseDescription;
22712 maxrefs = cp->maxReferences;
22713 continuationIndex = cp->continuationIndex;
22725 size_t relevant_refs_size = 0;
22736 &relevant_refs, &relevant_refs_size);
22741 relevant_refs_size = 1;
22755 if(node->referencesSize == 0) {
22763 size_t real_maxrefs = maxrefs;
22764 if(real_maxrefs == 0)
22765 real_maxrefs = node->referencesSize;
22766 else if(real_maxrefs > node->referencesSize)
22767 real_maxrefs = node->referencesSize;
22775 size_t skipped = 0;
22778 for(; referencesIndex < node->referencesSize && referencesCount < real_maxrefs; ++referencesIndex) {
22779 isExternal =
false;
22780 const UA_Node *current =
22781 returnRelevantNode(server, descr, all_refs, &node->references[referencesIndex],
22782 relevant_refs, relevant_refs_size, &isExternal);
22786 if(skipped < continuationIndex) {
22789 retval |= fillReferenceDescription(server->
nodestore, current,
22790 &node->references[referencesIndex],
22798 if(referencesCount == 0) {
22806 &
UA_TYPES[UA_TYPES_REFERENCEDESCRIPTION]);
22820 if(referencesIndex == node->referencesSize) {
22822 removeCp(cp, session);
22825 cp->continuationIndex += (
UA_UInt32)referencesCount;
22828 }
else if(maxrefs != 0 && referencesCount >= maxrefs) {
22835 UA_BrowseDescription_copy(descr, &cp->browseDescription);
22836 cp->maxReferences = maxrefs;
22837 cp->continuationIndex = (
UA_UInt32)referencesCount;
22838 UA_Guid *ident = UA_Guid_new();
22840 cp->identifier.data = (
UA_Byte*)ident;
22841 cp->identifier.length =
sizeof(
UA_Guid);
22872 for(
size_t i = 0; i < size; ++i) {
22881 UA_BrowseResult_init(&result);
22889 UA_Server_browseNext_single(UA_Server *server, UA_Session *session,
UA_Boolean releaseContinuationPoint,
22894 if(UA_ByteString_equal(&cp->identifier, continuationPoint)) {
22896 if(!releaseContinuationPoint)
22899 removeCp(cp, session);
22920 for(
size_t i = 0; i < size; ++i)
22929 UA_BrowseResult_init(&result);
22931 UA_Server_browseNext_single(server, &adminSession, releaseContinuationPoint,
22932 continuationPoint, &result);
22943 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount,
22945 const UA_NodeId *reftypes,
size_t reftypes_count,
22954 for(
size_t j = 0; j < reftypes_count; ++j) {
22973 result->
targets = tempTargets;
22974 (*targetsSize) *= 2;
22982 if(*nextSize <= *nextCount) {
22992 &(*next)[*nextCount]);
22997 walkBrowsePathElement(UA_Server *server, UA_Session *session,
23001 const UA_NodeId *current,
const size_t currentCount,
23002 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23005 size_t reftypes_count = 1;
23022 for(
size_t i = 0; i < currentCount; ++i) {
23034 if(targetName && (targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23040 for(
size_t r = 0; r < node->referencesSize &&
23043 walkBrowsePathElementNodeReference(result, targetsSize, next, nextSize, nextCount,
23045 reftypes, reftypes_count, reference);
23055 addBrowsePathTargets(UA_Server *server, UA_Session *session,
UA_BrowsePathResult *result,
23057 for(
size_t i = 0; i < currentCount; i++) {
23061 UA_NodeId_deleteMembers(¤t[i]);
23067 if(targetName->
namespaceIndex != node->browseName.namespaceIndex ||
23069 UA_NodeId_deleteMembers(¤t[i]);
23082 walkBrowsePath(UA_Server *server, UA_Session *session,
const UA_BrowsePath *path,
23084 UA_NodeId **current,
size_t *currentSize,
size_t *currentCount,
23085 UA_NodeId **next,
size_t *nextSize,
size_t *nextCount) {
23095 walkBrowsePathElement(server, session, result, &targetsSize,
23097 *current, *currentCount, next, nextSize, nextCount);
23100 for(
size_t j = 0; j < *currentCount; j++)
23101 UA_NodeId_deleteMembers(&(*current)[j]);
23113 size_t tSize = *currentSize;
size_t tCount = *currentCount;
UA_NodeId *tT = *current;
23114 *currentSize = *nextSize; *currentCount = *nextCount; *current = *next;
23115 *nextSize = tSize; *nextCount = tCount; *next = tT;
23128 if(targetsSize < result->targetsSize + (*currentCount)) {
23134 for(
size_t i = 0; i < *currentCount; ++i)
23135 UA_NodeId_deleteMembers(&(*current)[i]);
23139 result->
targets = newTargets;
23143 addBrowsePathTargets(server, session, result, targetName, *current, *currentCount);
23148 translateBrowsePathToNodeIds(UA_Server *server, UA_Session *session,
23164 size_t targetsSize = 10;
23175 size_t currentSize = 10;
23176 size_t currentCount = 0;
23183 size_t nextSize = 10;
23184 size_t nextCount = 0;
23204 walkBrowsePath(server, session, path, result, targetsSize,
23205 ¤t, ¤tSize, ¤tCount,
23206 &next, &nextSize, &nextCount);
23220 UA_BrowsePathTarget_deleteMembers(&result->
targets[i]);
23231 UA_BrowsePathResult_init(&result);
23233 translateBrowsePathToNodeIds(server, &adminSession, browsePath, &result);
23241 UA_LOG_DEBUG_SESSION(server->config.logger, session,
"Processing TranslateBrowsePathsToNodeIdsRequest");
23255 for(
size_t i = 0; i < size; ++i)
23256 translateBrowsePathToNodeIds(server, session, &request->
browsePaths[i],
23293 #ifdef UA_ENABLE_METHODCALLS 23296 getArgumentsVariableNode(UA_Server *server,
const UA_MethodNode *ofMethod,
23299 for(
size_t i = 0; i < ofMethod->referencesSize; ++i) {
23300 if(ofMethod->references[i].isInverse ==
false &&
23301 UA_NodeId_equal(&hasProperty, &ofMethod->references[i].referenceTypeId)) {
23302 const UA_Node *refTarget =
23307 refTarget->browseName.namespaceIndex == 0 &&
23317 argumentsConformsToDefinition(UA_Server *server,
const UA_VariableNode *argRequirements,
23322 size_t argReqsSize = argRequirements->value.data.value.value.arrayLength;
23325 if(UA_Variant_isScalar(&argRequirements->value.data.value.value))
23327 if(argReqsSize > argsSize)
23329 if(argReqsSize != argsSize)
23333 for(
size_t i = 0; i < argReqsSize; ++i)
23334 retval |=
typeCheckValue(server, &argReqs[i].dataType, argReqs[i].valueRank,
23335 argReqs[i].arrayDimensionsSize, argReqs[i].arrayDimensions,
23336 &args[i],
NULL, &args[i]);
23347 if(!methodCalled) {
23379 for(
size_t i = 0; i < methodCalled->referencesSize; ++i) {
23380 if(methodCalled->references[i].isInverse &&
23381 UA_NodeId_equal(&methodCalled->references[i].targetId.nodeId, &withObject->nodeId)) {
23383 &hasComponentNodeId, &hasSubTypeNodeId, 1);
23395 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"InputArguments"));
23397 if(!inputArguments) {
23403 result->
statusCode = argumentsConformsToDefinition(server, inputArguments,
23413 getArgumentsVariableNode(server, methodCalled, UA_STRING(
"OutputArguments"));
23414 if(outputArguments) {
23425 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23426 methodCallSession = session;
23431 #if defined(UA_ENABLE_METHODCALLS) && defined(UA_ENABLE_SUBSCRIPTIONS) 23432 methodCallSession =
NULL;
23438 void Service_Call(UA_Server *server, UA_Session *session,
23463 UA_CallMethodResult_init(&result);
23478 #ifdef UA_ENABLE_SUBSCRIPTIONS 23480 #define UA_VALUENCODING_MAXSTACK 512 23490 new->subscription =
NULL;
23491 new->currentQueueSize = 0;
23492 new->maxQueueSize = 0;
23495 UA_String_init(&new->indexRange);
23497 UA_NodeId_init(&new->monitoredNodeId);
23499 memset(&new->sampleJobGuid, 0,
sizeof(
UA_Guid));
23500 new->sampleJobIsRegistered =
false;
23511 UA_DataValue_deleteMembers(&val->value);
23514 monitoredItem->currentQueueSize = 0;
23516 UA_String_deleteMembers(&monitoredItem->indexRange);
23517 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23518 UA_NodeId_deleteMembers(&monitoredItem->monitoredNodeId);
23524 if(mon->currentQueueSize < mon->maxQueueSize)
23527 if(mon->discardOldest)
23530 queueItem =
TAILQ_LAST(&mon->queue, QueueOfQueueDataValues);
23533 UA_DataValue_deleteMembers(&queueItem->value);
23535 --mon->currentQueueSize;
23569 if(binsize > UA_VALUENCODING_MAXSTACK &&
23576 size_t encodingOffset = 0;
23578 NULL,
NULL, encoding, &encodingOffset);
23583 encoding->
length = encodingOffset;
23584 if(!mon->lastSampledValue.data || !
UA_String_equal(encoding, &mon->lastSampledValue))
23601 "Subscription %u | MonitoredItem %i | " 23602 "Not a data change notification",
23603 sub->subscriptionID, monitoredItem->itemId);
23609 UA_ReadValueId_init(&rvid);
23610 rvid.
nodeId = monitoredItem->monitoredNodeId;
23612 rvid.
indexRange = monitoredItem->indexRange;
23614 UA_DataValue_init(&value);
23621 valueEncoding.
data = stackValueEncoding;
23622 valueEncoding.
length = UA_VALUENCODING_MAXSTACK;
23626 UA_StatusCode retval = detectValueChange(monitoredItem, &value,
23627 &valueEncoding, &changed);
23633 if(!newQueueItem) {
23635 "Subscription %u | MonitoredItem %i | " 23636 "Item for the publishing queue could not be allocated",
23637 sub->subscriptionID, monitoredItem->itemId);
23642 if(valueEncoding.
data == stackValueEncoding) {
23646 "Subscription %u | MonitoredItem %i | " 23647 "ByteString to compare values could not be created",
23648 sub->subscriptionID, monitoredItem->itemId);
23652 valueEncoding = cbs;
23659 "Subscription %u | MonitoredItem %i | " 23660 "Item for the publishing queue could not be prepared",
23661 sub->subscriptionID, monitoredItem->itemId);
23666 newQueueItem->value = value;
23668 newQueueItem->clientHandle = monitoredItem->clientHandle;
23673 "Subscription %u | MonitoredItem %u | Sampled a new value",
23674 sub->subscriptionID, monitoredItem->itemId);
23677 UA_ByteString_deleteMembers(&monitoredItem->lastSampledValue);
23678 monitoredItem->lastSampledValue = valueEncoding;
23681 ensureSpaceInMonitoredItemQueue(monitoredItem);
23683 ++monitoredItem->currentQueueSize;
23687 if(valueEncoding.
data != stackValueEncoding)
23688 UA_ByteString_deleteMembers(&valueEncoding);
23689 UA_DataValue_deleteMembers(&value);
23695 job.
type = UA_JOBTYPE_METHODCALL;
23700 &mon->sampleJobGuid);
23702 mon->sampleJobIsRegistered =
true;
23707 if(!mon->sampleJobIsRegistered)
23709 mon->sampleJobIsRegistered =
false;
23721 new->session = session;
23722 new->subscriptionID = subscriptionID;
23723 new->sequenceNumber = 0;
23724 new->maxKeepAliveCount = 0;
23725 new->publishingEnabled =
false;
23726 memset(&new->publishJobGuid, 0,
sizeof(
UA_Guid));
23727 new->publishJobIsRegistered =
false;
23728 new->currentKeepAliveCount = 0;
23729 new->currentLifetimeCount = 0;
23730 new->lastMonitoredItemId = 0;
23734 new->retransmissionQueueSize = 0;
23751 TAILQ_REMOVE(&subscription->retransmissionQueue, nme, listEntry);
23752 UA_NotificationMessage_deleteMembers(&nme->message);
23755 subscription->retransmissionQueueSize = 0;
23762 if(mon->itemId == monitoredItemID)
23773 if(mon->itemId == monitoredItemID) {
23784 size_t notifications = 0;
23785 if(sub->publishingEnabled) {
23790 if(notifications >= sub->notificationsPerPublish) {
23791 *moreNotifications =
true;
23798 return notifications;
23802 UA_Subscription_addRetransmissionMessage(UA_Server *server,
UA_Subscription *sub,
23805 if(server->config.maxRetransmissionQueueSize > 0 &&
23806 sub->retransmissionQueueSize >= server->config.maxRetransmissionQueueSize) {
23808 TAILQ_LAST(&sub->retransmissionQueue, UA_ListOfNotificationMessages);
23809 TAILQ_REMOVE(&sub->retransmissionQueue, lastentry, listEntry);
23810 --sub->retransmissionQueueSize;
23811 UA_NotificationMessage_deleteMembers(&lastentry->message);
23817 ++sub->retransmissionQueueSize;
23824 if(entry->message.sequenceNumber != sequenceNumber)
23826 TAILQ_REMOVE(&sub->retransmissionQueue, entry, listEntry);
23827 --sub->retransmissionQueueSize;
23828 UA_NotificationMessage_deleteMembers(&entry->message);
23837 size_t notifications) {
23867 if(l >= notifications)
23871 min->
value = qv->value;
23874 --mon->currentQueueSize;
23881 UA_NotificationMessage_deleteMembers(message);
23887 "Publish Callback", sub->subscriptionID);
23891 size_t notifications = countQueuedNotifications(sub, &moreNotifications);
23894 if(notifications == 0) {
23895 ++sub->currentKeepAliveCount;
23896 if(sub->currentKeepAliveCount < sub->maxKeepAliveCount)
23899 "Subscription %u | Sending a KeepAlive",
23900 sub->subscriptionID)
23909 UA_PublishResponseEntry *pre =
SIMPLEQ_FIRST(&sub->session->responseQueue);
23914 "Subscription %u | Cannot send a publish response " 23915 "since the publish queue is empty", sub->subscriptionID)
23919 ++sub->currentLifetimeCount;
23920 if(sub->currentLifetimeCount > sub->lifeTimeCount) {
23922 "End of lifetime for subscription", sub->subscriptionID);
23923 UA_Session_deleteSubscription(server, sub->session, sub->subscriptionID);
23932 if(notifications > 0) {
23935 if(!retransmission) {
23937 "Subscription %u | Could not allocate memory " 23938 "for retransmission", sub->subscriptionID);
23943 prepareNotificationMessage(sub, message, notifications);
23946 "Subscription %u | Could not prepare the " 23947 "notification message", sub->subscriptionID);
23963 if(notifications == 0) {
23974 UA_Subscription_addRetransmissionMessage(server, sub, retransmission);
23978 size_t available = sub->retransmissionQueueSize;
23979 if(available > 0) {
23992 "Subscription %u | Sending out a publish response with %u " 23993 "notifications", sub->subscriptionID, (
UA_UInt32)notifications);
23999 sub->currentKeepAliveCount = 0;
24000 sub->currentLifetimeCount = 0;
24008 if(moreNotifications)
24014 if(sub->publishJobIsRegistered)
24018 "Subscription %u | Register subscription publishing callback",
24019 sub->subscriptionID);
24021 job.
type = UA_JOBTYPE_METHODCALL;
24026 &sub->publishJobGuid);
24028 sub->publishJobIsRegistered =
true;
24034 if(!sub->publishJobIsRegistered)
24037 "Subscription %u | Unregister subscription publishing callback",
24038 sub->subscriptionID);
24039 sub->publishJobIsRegistered =
false;
24049 UA_NodeId_delete(sessionToken);
24052 if(!session ||
LIST_FIRST(&session->serverSubscriptions))
24056 UA_PublishResponseEntry *pre;
24064 UA_PublishResponse_deleteMembers(response);
24078 #ifdef UA_ENABLE_SUBSCRIPTIONS 24080 #define UA_BOUNDEDVALUE_SETWBOUNDS(BOUNDS, SRC, DST) { \ 24081 if(SRC > BOUNDS.max) DST = BOUNDS.max; \ 24082 else if(SRC < BOUNDS.min) DST = BOUNDS.min; \ 24087 setSubscriptionSettings(UA_Server *server,
UA_Subscription *subscription,
24096 "Could not unregister publish job with error code 0x%08x",
24097 subscription->subscriptionID, retval);
24100 subscription->publishingInterval = requestedPublishingInterval;
24101 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.publishingIntervalLimits,
24102 requestedPublishingInterval, subscription->publishingInterval);
24104 if(requestedPublishingInterval != requestedPublishingInterval)
24105 subscription->publishingInterval = server->config.publishingIntervalLimits.min;
24106 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.keepAliveCountLimits,
24107 requestedMaxKeepAliveCount, subscription->maxKeepAliveCount);
24108 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.lifeTimeCountLimits,
24109 requestedLifetimeCount, subscription->lifeTimeCount);
24110 if(subscription->lifeTimeCount < 3 * subscription->maxKeepAliveCount)
24111 subscription->lifeTimeCount = 3 * subscription->maxKeepAliveCount;
24112 subscription->notificationsPerPublish = maxNotificationsPerPublish;
24113 if(maxNotificationsPerPublish == 0 ||
24114 maxNotificationsPerPublish > server->config.maxNotificationsPerPublish)
24115 subscription->notificationsPerPublish = server->config.maxNotificationsPerPublish;
24116 subscription->priority = priority;
24121 "Could not register publish job with error code 0x%08x",
24122 subscription->subscriptionID, retval);
24131 if(!newSubscription) {
24133 "Processing CreateSubscriptionRequest failed");
24137 newSubscription->subscriptionID = UA_Session_getUniqueSubscriptionID(session);
24138 UA_Session_addSubscription(session, newSubscription);
24145 newSubscription->currentKeepAliveCount = newSubscription->maxKeepAliveCount;
24154 "CreateSubscriptionRequest: Created Subscription %u " 24155 "with a publishing interval of %f ms", response->
subscriptionId,
24156 newSubscription->publishingInterval);
24164 "Processing ModifySubscriptionRequest");
24174 sub->currentLifetimeCount = 0;
24185 "Processing SetPublishingModeRequest");
24199 for(
size_t i = 0; i < size; ++i) {
24201 UA_Session_getSubscriptionByID(session, request->
subscriptionIds[i]);
24208 sub->currentLifetimeCount = 0;
24218 mon->monitoringMode = monitoringMode;
24229 samplingInterval < vn->minimumSamplingInterval)
24233 samplingInterval = 10000.0f;
24235 mon->samplingInterval = samplingInterval;
24236 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.samplingIntervalLimits,
24237 samplingInterval, mon->samplingInterval);
24238 if(samplingInterval != samplingInterval)
24239 mon->samplingInterval = server->config.samplingIntervalLimits.min;
24248 mon->trigger = filter->
trigger;
24252 UA_BOUNDEDVALUE_SETWBOUNDS(server->config.queueSizeLimits,
24263 static const UA_String binaryEncoding = {
sizeof(
"Default Binary")-1, (
UA_Byte*)
"Default Binary"};
24267 Service_CreateMonitoredItems_single(UA_Server *server, UA_Session *session,
24276 UA_DataValue_init(&v);
24283 UA_DataValue_deleteMembers(&v);
24286 UA_DataValue_deleteMembers(&v);
24310 &newMon->monitoredNodeId);
24316 newMon->subscription = sub;
24318 newMon->itemId = ++(sub->lastMonitoredItemId);
24319 newMon->timestampsToReturn = timestampsToReturn;
24320 setMonitoredItemSettings(server, newMon, request->
monitoringMode,
24340 "Processing CreateMonitoredItemsRequest");
24355 sub->currentLifetimeCount = 0;
24370 Service_CreateMonitoredItems_single(server, session, sub, request->
timestampsToReturn,
24375 Service_ModifyMonitoredItems_single(UA_Server *server, UA_Session *session,
UA_Subscription *sub,
24384 setMonitoredItemSettings(server, mon, mon->monitoringMode,
24394 "Processing ModifyMonitoredItemsRequest");
24410 sub->currentLifetimeCount = 0;
24425 Service_ModifyMonitoredItems_single(server, session, sub, &request->
itemsToModify[i],
24452 for(
size_t i = 0; i < response->
resultsSize; ++i) {
24476 if(
LIST_EMPTY(&session->serverSubscriptions)) {
24481 UA_PublishResponseEntry *entry =
UA_malloc(
sizeof(UA_PublishResponseEntry));
24486 entry->requestId = requestId;
24490 UA_PublishResponse_init(response);
24510 "Cannot process acknowledgements subscription %u",
24525 LIST_FOREACH(immediate, &session->serverSubscriptions, listEntry) {
24528 "Response on a late subscription", immediate->subscriptionID,
24538 UA_PublishResponse_init(&err_response);
24552 "Processing DeleteSubscriptionsRequest");
24580 if(
LIST_FIRST(&session->serverSubscriptions))
24582 UA_NodeId *sessionToken = UA_NodeId_new();
24594 "Processing DeleteMonitoredItemsRequest");
24609 sub->currentLifetimeCount = 0;
24632 sub->currentLifetimeCount = 0;
24636 TAILQ_FOREACH(entry, &sub->retransmissionQueue, listEntry) {
24660 static void UA_Client_init(
UA_Client* client, UA_ClientConfig config) {
24663 client->
config = config;
24670 UA_Client_init(client, config);
24674 static void UA_Client_deleteMembers(
UA_Client* client) {
24680 UA_UserTokenPolicy_deleteMembers(&client->
token);
24683 UA_String_deleteMembers(&client->
username);
24685 UA_String_deleteMembers(&client->
password);
24686 #ifdef UA_ENABLE_SUBSCRIPTIONS 24687 UA_Client_NotificationsAckNumber *n, *tmp;
24692 UA_Client_Subscription *sub, *tmps;
24694 UA_Client_Subscriptions_forceDelete(client, sub);
24699 UA_Client_deleteMembers(client);
24700 UA_Client_init(client, client->
config);
24704 UA_Client_deleteMembers(client);
24710 return UA_CLIENTSTATE_ERRORED;
24711 return client->
state;
24718 #define UA_MINMESSAGESIZE 8192 24739 retval = UA_TcpHelloMessage_encodeBinary(&hello, &message, &offset);
24740 UA_TcpHelloMessage_deleteMembers(&hello);
24747 retval |= UA_TcpMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24755 retval = conn->
send(conn, &message);
24758 "Sending HEL failed");
24762 "Sent HEL message");
24768 client->
config.timeout);
24771 "Receiving ACK message failed");
24778 retval = UA_TcpMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24779 retval |= UA_TcpAcknowledgeMessage_decodeBinary(&reply, &offset, &ackMessage);
24785 UA_ByteString_deleteMembers(&reply);
24804 UA_TcpAcknowledgeMessage_deleteMembers(&ackMessage);
24825 size_t offset = 12;
24829 UA_AsymmetricAlgorithmSecurityHeader_init(&asymHeader);
24830 asymHeader.
securityPolicyUri = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
24831 retval = UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(&asymHeader, &message, &offset);
24837 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
24842 retval |= UA_NodeId_encodeBinary(&requestType, &message, &offset);
24846 UA_OpenSecureChannelRequest_init(&opnSecRq);
24852 "Requesting to renew the SecureChannel");
24856 "Requesting to open a SecureChannel");
24861 retval |= UA_OpenSecureChannelRequest_encodeBinary(&opnSecRq, &message, &offset);
24872 retval |= UA_SecureConversationMessageHeader_encodeBinary(&messageHeader, &message, &offset);
24882 retval = conn->
send(conn, &message);
24890 client->
config.timeout);
24893 "Receiving OpenSecureChannelResponse failed");
24899 retval = UA_SecureConversationMessageHeader_decodeBinary(&reply, &offset, &messageHeader);
24900 retval |= UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(&reply, &offset, &asymHeader);
24901 retval |= UA_SequenceHeader_decodeBinary(&reply, &offset, &seqHeader);
24902 retval |= UA_NodeId_decodeBinary(&reply, &offset, &requestType);
24906 UA_ByteString_deleteMembers(&reply);
24907 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24908 UA_NodeId_deleteMembers(&requestType);
24910 "Reply answers the wrong request. Expected OpenSecureChannelResponse.");
24919 retval = UA_OpenSecureChannelResponse_decodeBinary(&reply, &offset, &response);
24925 UA_ByteString_deleteMembers(&reply);
24945 "SecureChannel renewed");
24948 "SecureChannel opened");
24952 "SecureChannel could not be renewed " 24953 "with error code %s", UA_StatusCode_name(retval));
24956 "SecureChannel could not be opened " 24957 "with error code %s", UA_StatusCode_name(retval));
24961 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(&asymHeader);
24962 UA_OpenSecureChannelResponse_deleteMembers(&response);
24969 UA_ActivateSessionRequest_init(&request);
24977 UA_AnonymousIdentityToken_init(identityToken);
24984 UA_UserNameIdentityToken_init(identityToken);
24999 "ActivateSession failed with error code %s",
25004 UA_ActivateSessionRequest_deleteMembers(&request);
25005 UA_ActivateSessionResponse_deleteMembers(&response);
25011 GetEndpoints(
UA_Client *client,
size_t* endpointDescriptionsSize,
25014 UA_GetEndpointsRequest_init(&request);
25021 UA_GetEndpointsResponse_init(&response);
25028 "GetEndpointRequest failed with error code %s",
25029 UA_StatusCode_name(retval));
25030 UA_GetEndpointsResponse_deleteMembers(&response);
25033 *endpointDescriptions = response.
endpoints;
25037 UA_GetEndpointsResponse_deleteMembers(&response);
25042 EndpointsHandshake(
UA_Client *client) {
25044 size_t endpointArraySize = 0;
25045 UA_StatusCode retval = GetEndpoints(client, &endpointArraySize, &endpointArray);
25051 UA_String securityNone = UA_STRING(
"http://opcfoundation.org/UA/SecurityPolicy#None");
25052 UA_String binaryTransport = UA_STRING(
"http://opcfoundation.org/UA-Profile/" 25053 "Transport/uatcp-uasc-uabinary");
25056 for(
size_t i = 0; i < endpointArraySize; ++i) {
25068 endpointFound =
true;
25087 UA_UserTokenPolicy_copy(userToken, &client->
token);
25095 if(!endpointFound) {
25097 "No suitable endpoint found");
25099 }
else if(!tokenFound) {
25101 "No suitable UserTokenPolicy found for the possible endpoints");
25110 UA_CreateSessionRequest_init(&request);
25120 UA_CreateSessionResponse_init(&response);
25127 UA_CreateSessionRequest_deleteMembers(&request);
25128 UA_CreateSessionResponse_deleteMembers(&response);
25135 UA_CloseSessionRequest_init(&request);
25145 UA_CloseSessionRequest_deleteMembers(&request);
25146 UA_CloseSessionResponse_deleteMembers(&response);
25151 CloseSecureChannel(
UA_Client *client) {
25154 UA_CloseSecureChannelRequest_init(&request);
25179 UA_CloseSecureChannelRequest_deleteMembers(&request);
25183 size_t offset = 12;
25184 retval |= UA_SymmetricAlgorithmSecurityHeader_encodeBinary(&symHeader, &message, &offset);
25185 retval |= UA_SequenceHeader_encodeBinary(&seqHeader, &message, &offset);
25186 retval |= UA_NodeId_encodeBinary(&typeId, &message, &offset);
25192 retval |= UA_SecureConversationMessageHeader_encodeBinary(&msgHeader, &message, &offset);
25196 retval = conn->
send(conn, &message);
25201 UA_CloseSecureChannelRequest_deleteMembers(&request);
25207 size_t* endpointDescriptionsSize,
25209 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25211 if(client->
state == UA_CLIENTSTATE_ERRORED)
25231 retval = HelAckHandshake(client);
25233 retval = SecureChannelHandshake(client,
false);
25235 retval = GetEndpoints(client, endpointDescriptionsSize, endpointDescriptions);
25246 const char *username,
const char *password){
25256 if(client->
state == UA_CLIENTSTATE_CONNECTED)
25258 if(client->
state == UA_CLIENTSTATE_ERRORED) {
25265 endpointUrl, client->
config.logger);
25278 retval = HelAckHandshake(client);
25280 retval = SecureChannelHandshake(client,
false);
25282 retval = EndpointsHandshake(client);
25284 retval = SessionHandshake(client);
25286 retval = ActivateSession(client);
25289 client->
state = UA_CLIENTSTATE_CONNECTED;
25301 if(client->
state == UA_CLIENTSTATE_READY)
25307 retval = CloseSession(client);
25310 retval |= CloseSecureChannel(client);
25315 UA_StatusCode retval = SecureChannelHandshake(client,
true);
25317 client->
state = UA_CLIENTSTATE_CONNECTED;
25349 "Server replied with an error message: %s %.*s",
25351 retval = msg->
error;
25355 "Server replied with the wrong message type");
25365 "Reply answers the wrong requestId. " 25366 "Async services are not yet implemented.");
25374 retval = UA_NodeId_decodeBinary(message, &offset, &responseId);
25384 "Reply answers the wrong request. Expected ns=%i,i=%i." 25388 UA_NodeId_deleteMembers(&responseId);
25405 "Error receiving the response");
25412 void *response,
const UA_DataType *responseType) {
25413 UA_init(response, responseType);
25420 client->
state = UA_CLIENTSTATE_ERRORED;
25441 client->
state = UA_CLIENTSTATE_FAULTED;
25447 UA_init(response, responseType);
25457 if(now < maxDate) {
25474 UA_ByteString_deleteMembers(&reply);
25492 UA_ReadRequest_init(&request);
25494 UA_ReadValueId_init(&
id);
25511 UA_ReadResponse_deleteMembers(&response);
25525 UA_ReadResponse_deleteMembers(&response);
25533 UA_BrowseRequest_init(&bReq);
25557 UA_BrowseRequest_deleteMembers(&bReq);
25558 UA_BrowseResponse_deleteMembers(&bResp);
25574 UA_AddReferencesItem_init(&item);
25582 UA_AddReferencesRequest_init(&request);
25588 UA_AddReferencesResponse_deleteMembers(&response);
25592 UA_AddReferencesResponse_deleteMembers(&response);
25595 retval = response.
results[0];
25596 UA_AddReferencesResponse_deleteMembers(&response);
25606 UA_DeleteReferencesItem_init(&item);
25613 UA_DeleteReferencesRequest_init(&request);
25619 UA_DeleteReferencesResponse_deleteMembers(&response);
25623 UA_DeleteReferencesResponse_deleteMembers(&response);
25626 retval = response.
results[0];
25627 UA_DeleteReferencesResponse_deleteMembers(&response);
25635 UA_DeleteNodesItem_init(&item);
25639 UA_DeleteNodesRequest_init(&request);
25645 UA_DeleteNodesResponse_deleteMembers(&response);
25649 UA_DeleteNodesResponse_deleteMembers(&response);
25652 retval = response.
results[0];
25653 UA_DeleteNodesResponse_deleteMembers(&response);
25665 UA_AddNodesRequest_init(&request);
25667 UA_AddNodesItem_init(&item);
25682 UA_AddNodesResponse_deleteMembers(&response);
25686 UA_AddNodesResponse_deleteMembers(&response);
25694 UA_AddNodesResponse_deleteMembers(&response);
25702 #ifdef UA_ENABLE_METHODCALLS 25706 const UA_NodeId methodId,
size_t inputSize,
25707 const UA_Variant *input,
size_t *outputSize,
25711 UA_CallRequest_init(&request);
25713 UA_CallMethodRequest_init(&item);
25731 UA_CallResponse_deleteMembers(&response);
25736 if(output !=
NULL && outputSize !=
NULL) {
25742 UA_CallResponse_deleteMembers(&response);
25760 UA_WriteValue_init(&wValue);
25761 wValue.
nodeId = *nodeId;
25770 UA_WriteRequest_init(&wReq);
25784 UA_WriteResponse_deleteMembers(&wResp);
25791 size_t newArrayDimensionsSize) {
25792 if(!newArrayDimensions)
25796 UA_WriteValue_init(&wValue);
25803 UA_WriteRequest_init(&wReq);
25816 UA_WriteResponse_deleteMembers(&wResp);
25829 UA_ReadValueId_init(&item);
25833 UA_ReadRequest_init(&request);
25845 UA_ReadResponse_deleteMembers(&response);
25858 UA_ReadResponse_deleteMembers(&response);
25865 UA_Variant_init(&res->
value);
25868 }
else if(UA_Variant_isScalar(&res->
value) &&
25877 UA_ReadResponse_deleteMembers(&response);
25884 size_t *outArrayDimensionsSize) {
25886 UA_ReadValueId_init(&item);
25890 UA_ReadRequest_init(&request);
25907 else if(!res->
hasValue || UA_Variant_isScalar(&res->
value))
25912 if(UA_Variant_isScalar(&res->
value) ||
25925 UA_ReadResponse_deleteMembers(&response);
25937 #ifdef UA_ENABLE_SUBSCRIPTIONS 25940 UA_Client_Subscriptions_new(
UA_Client *client, UA_SubscriptionSettings settings,
25943 UA_CreateSubscriptionRequest_init(&request);
25949 request.
priority = settings.priority;
25956 UA_Client_Subscription *newSub =
UA_malloc(
sizeof(UA_Client_Subscription));
25968 newSub->priority = request.
priority;
25971 if(newSubscriptionId)
25972 *newSubscriptionId = newSub->subscriptionID;
25975 UA_CreateSubscriptionResponse_deleteMembers(&response);
25982 UA_Client_Subscription *sub;
25983 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
25984 if(sub->subscriptionID == subscriptionId)
25991 UA_Client_MonitoredItem *mon, *tmpmon;
25994 UA_Client_Subscriptions_removeMonitoredItem(client, sub->subscriptionID,
25995 mon->monitoredItemId);
26002 UA_DeleteSubscriptionsRequest_init(&request);
26008 retval = response.
results[0];
26009 UA_DeleteSubscriptionsResponse_deleteMembers(&response);
26013 "Could not remove subscription %u with error code %s",
26014 sub->subscriptionID, UA_StatusCode_name(retval));
26018 UA_Client_Subscriptions_forceDelete(client, sub);
26023 UA_Client_Subscriptions_forceDelete(
UA_Client *client,
26024 UA_Client_Subscription *sub) {
26025 UA_Client_MonitoredItem *mon, *mon_tmp;
26027 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26036 UA_Client_Subscriptions_addMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26038 UA_MonitoredItemHandlingFunction hf,
26039 void *hfContext,
UA_UInt32 *newMonitoredItemId) {
26040 UA_Client_Subscription *sub;
26041 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26042 if(sub->subscriptionID == subscriptionId)
26049 UA_Client_MonitoredItem *newMon =
UA_malloc(
sizeof(UA_Client_MonitoredItem));
26055 UA_CreateMonitoredItemsRequest_init(&request);
26058 UA_MonitoredItemCreateRequest_init(&item);
26080 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26086 UA_NodeId_copy(&nodeId, &newMon->monitoredNodeId);
26087 newMon->attributeID = attributeID;
26088 newMon->clientHandle = client->monitoredItemHandles;
26089 newMon->samplingInterval = sub->publishingInterval;
26090 newMon->queueSize = 1;
26091 newMon->discardOldest =
true;
26092 newMon->handler = hf;
26093 newMon->handlerContext = hfContext;
26096 *newMonitoredItemId = newMon->monitoredItemId;
26099 "Created a monitored item with client handle %u",
26100 client->monitoredItemHandles);
26102 UA_CreateMonitoredItemsResponse_deleteMembers(&response);
26107 UA_Client_Subscriptions_removeMonitoredItem(
UA_Client *client,
UA_UInt32 subscriptionId,
26109 UA_Client_Subscription *sub;
26110 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26111 if(sub->subscriptionID == subscriptionId)
26117 UA_Client_MonitoredItem *mon;
26119 if(mon->monitoredItemId == monitoredItemId)
26127 UA_DeleteMonitoredItemsRequest_init(&request);
26135 retval = response.
results[0];
26136 UA_DeleteMonitoredItemsResponse_deleteMembers(&response);
26140 "Could not remove monitoreditem %u with error code %s",
26141 monitoredItemId, UA_StatusCode_name(retval));
26146 UA_NodeId_deleteMembers(&mon->monitoredNodeId);
26158 UA_Client_Subscription *sub;
26159 LIST_FOREACH(sub, &client->subscriptions, listEntry) {
26167 "Processing a publish response on subscription %u with %u notifications",
26179 UA_Client_NotificationsAckNumber *ack;
26180 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26204 UA_Client_MonitoredItem *mon;
26207 mon->handler(mon->monitoredItemId, &mitemNot->
value, mon->handlerContext);
26213 "Could not process a notification with clienthandle %u on subscription %u",
26219 UA_Client_NotificationsAckNumber *tmpAck =
UA_malloc(
sizeof(UA_Client_NotificationsAckNumber));
26222 "Not enough memory to store the acknowledgement for a " 26223 "publish message on subscription %u", sub->subscriptionID);
26227 tmpAck->subAck.subscriptionId = sub->subscriptionID;
26232 UA_Client_Subscriptions_manuallySendPublishRequest(
UA_Client *client) {
26233 if (client->
state == UA_CLIENTSTATE_ERRORED)
26237 while(moreNotifications) {
26239 UA_PublishRequest_init(&request);
26242 UA_Client_NotificationsAckNumber *ack;
26243 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry)
26253 LIST_FOREACH(ack, &client->pendingNotificationsAcks, listEntry) {
26260 UA_Client_processPublishResponse(client, &request, &response);
26263 UA_PublishResponse_deleteMembers(&response);
26264 UA_PublishRequest_deleteMembers(&request);
26280 #define LEAPOCH (946684800LL + 86400*(31+29)) 26282 #define DAYS_PER_400Y (365*400 + 97) 26283 #define DAYS_PER_100Y (365*100 + 24) 26284 #define DAYS_PER_4Y (365*4 + 1) 26288 long long days, secs, years;
26289 int remdays, remsecs, remyears;
26290 int qc_cycles, c_cycles, q_cycles;
26292 int wday, yday, leap;
26293 static const char days_in_month[] = {31,30,31,30,31,31,30,31,30,31,31,29};
26296 if (t < INT_MIN * 31622400LL || t > INT_MAX * 31622400LL)
26300 days = secs / 86400LL;
26301 remsecs = (int)(secs % 86400);
26307 wday = (int)((3+days)%7);
26308 if (wday < 0) wday += 7;
26318 if (c_cycles == 4) --c_cycles;
26322 if (q_cycles == 25) --q_cycles;
26325 remyears = remdays / 365;
26326 if (remyears == 4) --remyears;
26327 remdays -= remyears * 365;
26329 leap = !remyears && (q_cycles || !c_cycles);
26330 yday = remdays + 31 + 28 + leap;
26331 if (yday >= 365+leap) yday -= 365+leap;
26333 years = remyears + 4*q_cycles + 100*c_cycles + 400LL*qc_cycles;
26335 for (months=0; days_in_month[months] <= remdays; ++months)
26336 remdays -= days_in_month[months];
26338 if (years+100 > INT_MAX || years+100 < INT_MIN)
26341 tm->tm_year = (int)(years + 100);
26342 tm->tm_mon = months + 2;
26343 if (tm->tm_mon >= 12) {
26347 tm->tm_mday = remdays + 1;
26348 tm->tm_wday = wday;
26349 tm->tm_yday = yday;
26351 tm->tm_hour = remsecs / 3600;
26352 tm->tm_min = remsecs / 60 % 60;
26353 tm->tm_sec = remsecs % 60;
26386 rng->
inc = (initseq << 1u) | 1u;
26388 rng->
state += initial_state;
26393 uint64_t oldstate = rng->
state;
26394 rng->
state = oldstate * 6364136223846793005ULL + rng->
inc;
26395 uint32_t xorshifted = (uint32_t)(((oldstate >> 18u) ^ oldstate) >> 27u);
26396 uint32_t rot = (uint32_t)(oldstate >> 59u);
26397 return (xorshifted >> rot) | (xorshifted << ((~rot + 1u) & 31));
26408 #ifndef UA_ENABLE_STATUSCODE_DESCRIPTIONS 26409 static const size_t statusCodeDescriptionsSize = 1;
26411 {0xffffffff,
"StatusCode descriptions not available",
"open62541 was compiled without support for statuscode descriptions"}
26414 static const size_t statusCodeDescriptionsSize = 229;
26434 {
UA_STATUSCODE_BADNOTHINGTODO,
"BadNothingToDo",
"There was nothing to do because the client passed a list of operations with no elements."},
26483 {
UA_STATUSCODE_BADNOTFOUND,
"BadNotFound",
"A requested item was not found or a search operation ended without success."},
26515 {
UA_STATUSCODE_BADNOVALIDCERTIFICATES,
"BadNoValidCertificates",
"The client did not provide at least one software certificate that is valid and meets the profile requirements for the server."},
26520 {
UA_STATUSCODE_BADNODEIDREJECTED,
"BadNodeIdRejected",
"The requested node id was reject because it was either invalid or server does not allow node ids to be specified by the client."},
26540 {
UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE,
"GoodResultsMayBeIncomplete",
"The server should have followed a reference to a node in a remote server but did not. The result set may be incomplete."},
26552 {
UA_STATUSCODE_BADTYPEMISMATCH,
"BadTypeMismatch",
"The value supplied for the attribute is not of the same type as the attribute's value."},
26577 {
UA_STATUSCODE_BADDEVICEFAILURE,
"BadDeviceFailure",
"There has been a failure in the device/data source that generates the value that has affected the value."},
26578 {
UA_STATUSCODE_BADSENSORFAILURE,
"BadSensorFailure",
"There has been a failure in the sensor from which the value is derived by the device/data source."},
26587 {
UA_STATUSCODE_UNCERTAINSUBNORMAL,
"UncertainSubNormal",
"The value is derived from multiple sources and has less than the required number of Good sources."},
26609 {
UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED,
"BadTimestampNotSupported",
"The client requested history using a timestamp format the server does not support (i.e requested ServerTimestamp when server only supports SourceTimestamp)."},
26614 {
UA_STATUSCODE_GOODMOREDATA,
"GoodMoreData",
"The data or event field was successfully replaced in the historical database."},
26619 {
UA_STATUSCODE_GOODDATAIGNORED,
"GoodDataIgnored",
"The request pecifies fields which are not valid for the EventType or cannot be saved by the historian."},
26621 {
UA_STATUSCODE_GOODEDITED,
"GoodEdited",
"The value does not come from the real source and has been edited by the server."},
26625 {
UA_STATUSCODE_BADDOMINANTVALUECHANGED,
"BadDominantValueChanged",
"The related EngineeringUnit has been changed but this change has not been applied to the device. The Variable Value is still dependent on the previous unit but its status is currently Bad."},
26626 {
UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED,
"UncertainDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is uncertain."},
26627 {
UA_STATUSCODE_BADDEPENDENTVALUECHANGED,
"BadDependentValueChanged",
"A dependent value has been changed but the change has not been applied to the device. The quality of the dominant variable is Bad."},
26645 {0xffffffff,
"Unknown",
"Unknown StatusCode"},
26651 for(
size_t i = 0; i < statusCodeDescriptionsSize; ++i) {
26652 if(statusCodeDescriptions[i].code == code)
26653 return &statusCodeDescriptions[i];
26655 return &statusCodeDescriptions[statusCodeDescriptionsSize-1];
26664 #if defined(__MINGW32__) && (!defined(WINVER) || WINVER < 0x501) 26667 # undef _WIN32_WINDOWS 26668 # undef _WIN32_WINNT 26669 # define WINVER 0x0501 26670 # define _WIN32_WINDOWS 0x0501 26671 # define _WIN32_WINNT 0x0501 26675 #include <stdlib.h> 26677 #include <string.h> 26681 # include <malloc.h> 26684 # ifdef SLIST_ENTRY 26685 # undef SLIST_ENTRY 26688 # define _WINSOCK_DEPRECATED_NO_WARNINGS 26689 # include <winsock2.h> 26690 # include <ws2tcpip.h> 26691 # define CLOSESOCKET(S) closesocket((SOCKET)S) 26692 # define ssize_t int 26693 # define WIN32_INT (int) 26695 # define CLOSESOCKET(S) close(S) 26696 # define SOCKET int 26698 # include <arpa/inet.h> 26699 # include <netinet/in.h> 26700 # include <sys/select.h> 26701 # include <sys/ioctl.h> 26702 # include <fcntl.h> 26703 # include <unistd.h> 26704 # include <netdb.h> 26706 # include <sys/socket.h> 26708 #if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) 26709 # include <sys/param.h> 26711 # include<sys/socket.h> 26714 # ifndef __CYGWIN__ 26715 # include <netinet/tcp.h> 26721 #if defined(_WIN32) || defined(__OpenBSD__) || \ 26722 (defined(__GNU_LIBRARY__) && (__GNU_LIBRARY__ <= 6) && \ 26723 (__GLIBC__ <= 2) && (__GLIBC_MINOR__ < 16) || \ 26724 !defined(__GNU_LIBRARY__)) 26725 # define UA_fd_set(fd, fds) FD_SET((unsigned int)fd, fds) 26726 # define UA_fd_isset(fd, fds) FD_ISSET((unsigned int)fd, fds) 26728 # define UA_fd_set(fd, fds) FD_SET(fd, fds) 26729 # define UA_fd_isset(fd, fds) FD_ISSET(fd, fds) 26732 #ifdef UA_ENABLE_MULTITHREADING 26733 # include <urcu/uatomic.h> 26737 #define errno__ WSAGetLastError() 26738 # define INTERRUPTED WSAEINTR 26739 # define WOULDBLOCK WSAEWOULDBLOCK 26740 # define AGAIN WSAEWOULDBLOCK 26742 # define errno__ errno 26743 # define INTERRUPTED EINTR 26744 # define WOULDBLOCK EWOULDBLOCK 26745 # define AGAIN EAGAIN 26761 size_t nWritten = 0;
26763 #ifdef MSG_NOSIGNAL 26764 flags = MSG_NOSIGNAL;
26771 size_t bytes_to_send = buf->
length - nWritten;
26775 connection->
close(connection);
26776 socket_close(connection);
26777 UA_ByteString_deleteMembers(buf);
26781 nWritten += (size_t)n;
26782 }
while(nWritten < buf->length);
26783 UA_ByteString_deleteMembers(buf);
26790 if(!response->
data) {
26798 UA_UInt32 timeout_usec = timeout * 1000;
26800 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), timeout_usec % 1000000};
26802 struct timeval tmptv = {(
long int)(timeout_usec / 1000000), (
long int)(timeout_usec % 1000000)};
26804 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26805 (
const char *)&tmptv,
sizeof(
struct timeval));
26807 DWORD timeout_dw = timeout;
26808 int ret = setsockopt(connection->
sockfd, SOL_SOCKET, SO_RCVTIMEO,
26809 (
const char*)&timeout_dw,
sizeof(DWORD));
26812 UA_ByteString_deleteMembers(response);
26813 socket_close(connection);
26825 UA_UInt32 timeout_usec = timeout * 1000;
26826 struct timeval tmptv = {(
long int)(timeout_usec / 1000000),
26827 (
long int)(timeout_usec % 1000000)};
26828 int retval = select(connection->
sockfd+1, &fdset,
NULL,
NULL, &tmptv);
26830 ret = recv(connection->
sockfd, (
char*)response->
data,
26836 ret = recv(connection->
sockfd, (
char*)response->
data,
26840 ssize_t ret = recv(connection->
sockfd, (
char*)response->
data,
26846 UA_ByteString_deleteMembers(response);
26847 socket_close(connection);
26853 UA_ByteString_deleteMembers(response);
26857 socket_close(connection);
26862 response->
length = (size_t)ret;
26869 if(ioctlsocket(sockfd, FIONBIO, &iMode) != NO_ERROR)
26872 int opts = fcntl(sockfd, F_GETFL);
26873 if(opts < 0 || fcntl(sockfd, F_SETFL, opts|O_NONBLOCK) < 0)
26879 static void FreeConnectionCallback(UA_Server *server,
void *ptr) {
26921 #define MAXBACKLOG 100 26946 UA_ByteString_deleteMembers(buf);
26951 UA_ByteString_deleteMembers(buf);
26970 ServerNetworkLayerTCP_closeConnection(
UA_Connection *connection) {
26971 #ifdef UA_ENABLE_MULTITHREADING 26979 #if UA_LOGLEVEL <= 300 26983 "Connection %i | Force closing the connection",
26988 shutdown(connection->
sockfd, 2);
26998 struct sockaddr_in addr;
26999 socklen_t addrlen =
sizeof(
struct sockaddr_in);
27000 int res = getpeername(newsockfd, (
struct sockaddr*)&addr, &addrlen);
27004 "Connection %i | New connection over TCP from %s:%d",
27005 newsockfd, inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
27008 "Connection %i | New connection over TCP, " 27009 "getpeername failed with errno %i", newsockfd, errno);
27017 c->
send = socket_write;
27018 c->
close = ServerNetworkLayerTCP_closeConnection;
27028 "No memory for a new Connection");
27046 char hostname[256];
27047 if(gethostname(hostname, 255) == 0) {
27048 char discoveryUrl[256];
27050 du.
length = (size_t)snprintf(discoveryUrl, 255,
"opc.tcp://%s:%d",
27051 hostname, layer->
port);
27053 du.
length = (size_t)_snprintf_s(discoveryUrl, 255, _TRUNCATE,
27054 "opc.tcp://%s:%d", hostname, layer->
port);
27061 SOCKET newsock = socket(PF_INET, SOCK_STREAM, 0);
27063 if(newsock == INVALID_SOCKET)
27069 "Error opening the server socket");
27075 if(setsockopt(newsock, SOL_SOCKET, SO_REUSEADDR,
27076 (
const char *)&optval,
sizeof(optval)) == -1 ||
27079 "Error during setting of server socket options");
27085 const struct sockaddr_in serv_addr = {
27086 .sin_family = AF_INET, .sin_addr.s_addr = INADDR_ANY,
27087 .sin_port = htons(layer->
port), .sin_zero = {0}};
27088 if(bind(newsock, (
const struct sockaddr *)&serv_addr,
sizeof(serv_addr)) < 0) {
27090 "Error during binding of the server socket");
27098 "Error listening on server socket");
27105 "TCP network layer listening on %.*s",
27119 js[c].
type = UA_JOBTYPE_DETACHCONNECTION;
27124 js[c].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27142 size_t totalJobs = removeClosedConnections(layer, js);
27145 fd_set fdset, errset;
27146 UA_Int32 highestfd = setFDSet(layer, &fdset);
27147 setFDSet(layer, &errset);
27148 struct timeval tmptv = {0, timeout * 1000};
27149 UA_Int32 resultsize = select(highestfd+1, &fdset,
NULL, &errset, &tmptv);
27150 if(totalJobs == 0 && resultsize <= 0) {
27161 if(newsockfd != INVALID_SOCKET)
27166 socket_set_nonblocking(newsockfd);
27169 setsockopt(newsockfd, IPPROTO_TCP, TCP_NODELAY, (
void *)&i,
sizeof(i));
27170 ServerNetworkLayerTCP_add(layer, (
UA_Int32)newsockfd);
27177 for(
size_t i = 0; i < layer->
mappingsSize && j < (size_t)resultsize; ++i) {
27186 js[totalJobs + j].
type = UA_JOBTYPE_BINARYMESSAGE_NETWORKLAYER;
27191 "Connection %i | Connection closed from remote", c->
sockfd);
27193 js[totalJobs + j].
type = UA_JOBTYPE_DETACHCONNECTION;
27198 js[totalJobs + j].
type = UA_JOBTYPE_METHODCALL_DELAYED;
27199 js[totalJobs + j].
job.
methodCall.method = FreeConnectionCallback;
27206 if(totalJobs == 0) {
27218 "Shutting down the TCP network layer with %d open connection(s)",
27227 items[i*2].
type = UA_JOBTYPE_DETACHCONNECTION;
27229 items[(i*2)+1].type = UA_JOBTYPE_METHODCALL_DELAYED;
27230 items[(i*2)+1].job.
methodCall.method = FreeConnectionCallback;
27251 WORD wVersionRequested;
27253 wVersionRequested = MAKEWORD(2, 2);
27254 WSAStartup(wVersionRequested, &wsaData);
27263 layer->
conf = conf;
27264 layer->
port = port;
27267 nl.
start = ServerNetworkLayerTCP_start;
27268 nl.
getJobs = ServerNetworkLayerTCP_getJobs;
27269 nl.
stop = ServerNetworkLayerTCP_stop;
27279 ClientNetworkLayerGetBuffer(
UA_Connection *connection,
size_t length,
27290 UA_ByteString_deleteMembers(buf);
27295 #ifdef UA_ENABLE_MULTITHREADING 27303 socket_close(connection);
27311 WORD wVersionRequested;
27313 wVersionRequested = MAKEWORD(2, 2);
27314 WSAStartup(wVersionRequested, &wsaData);
27322 connection.
send = socket_write;
27323 connection.
recv = socket_recv;
27324 connection.
close = ClientNetworkLayerClose;
27329 char hostname[512];
27331 const char *path =
NULL;
27337 "Server url is invalid: %s", endpointUrl);
27340 "Server url does not begin with 'opc.tcp://' '%s'",
27348 "No port defined, using standard port %d", port);
27351 struct addrinfo hints, *server;
27352 memset(&hints, 0,
sizeof(hints));
27353 hints.ai_socktype = SOCK_STREAM;
27354 hints.ai_family = AF_INET;
27357 snprintf(portStr, 6,
"%d", port);
27359 _snprintf_s(portStr, 6, _TRUNCATE,
"%d", port);
27361 int error = getaddrinfo(hostname, portStr, &hints, &server);
27362 if(error != 0 || !server) {
27364 "DNS lookup of %s failed with error %s",
27365 hostname, gai_strerror(error));
27370 SOCKET clientsockfd = socket(server->ai_family, server->ai_socktype,
27371 server->ai_protocol);
27373 if(clientsockfd == INVALID_SOCKET) {
27375 if(clientsockfd < 0) {
27378 "Could not create client socket");
27379 freeaddrinfo(server);
27385 error = connect(clientsockfd, server->ai_addr,
WIN32_INT server->ai_addrlen);
27386 freeaddrinfo(server);
27388 ClientNetworkLayerClose(&connection);
27391 FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
27392 FORMAT_MESSAGE_FROM_SYSTEM |
27393 FORMAT_MESSAGE_IGNORE_INSERTS,
27394 NULL, WSAGetLastError(),
27395 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
27396 (LPWSTR)&s, 0,
NULL);
27398 "Connection to %s failed. Error: %d: %S",
27399 endpointUrl, WSAGetLastError(), s);
27403 "Connection to %s failed. Error: %d: %s",
27404 endpointUrl, errno, strerror(errno));
27409 #ifdef SO_NOSIGPIPE 27411 int sso_result = setsockopt(connection.
sockfd,
27412 SOL_SOCKET, SO_NOSIGPIPE,
27413 (
void*)&val,
sizeof(val));
27416 "Couldn't set SO_NOSIGPIPE");
27430 # ifdef SLIST_ENTRY 27431 # undef SLIST_ENTRY 27433 # include <windows.h> 27435 # include <sys/time.h> 27438 #if defined(__APPLE__) || defined(__MACH__) 27439 # include <mach/clock.h> 27440 # include <mach/mach.h> 27444 #if defined(_WIN32) 27448 GetSystemTime(&st);
27449 SystemTimeToFileTime(&st, &ft);
27451 ul.LowPart = ft.dwLowDateTime;
27452 ul.HighPart = ft.dwHighDateTime;
27456 gettimeofday(&tv,
NULL);
27462 #if defined(_WIN32) 27463 LARGE_INTEGER freq, ticks;
27464 QueryPerformanceFrequency(&freq);
27465 QueryPerformanceCounter(&ticks);
27468 #elif defined(__APPLE__) || defined(__MACH__) 27470 clock_serv_t cclock;
27471 mach_timespec_t mts;
27472 host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &cclock);
27473 clock_get_time(cclock, &mts);
27474 mach_port_deallocate(mach_task_self(), cclock);
27476 #elif !defined(CLOCK_MONOTONIC_RAW) 27477 struct timespec ts;
27478 clock_gettime(CLOCK_MONOTONIC, &ts);
27481 struct timespec ts;
27482 clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
27493 #include <stdarg.h> 27495 #ifdef UA_ENABLE_MULTITHREADING 27496 #include <pthread.h> 27497 static pthread_mutex_t printf_mutex = PTHREAD_MUTEX_INITIALIZER;
27500 const char *
LogLevelNames[6] = {
"trace",
"debug",
"info",
"warning",
"error",
"fatal"};
27501 const char *
LogCategoryNames[6] = {
"network",
"channel",
"session",
"server",
"client",
"userland"};
27503 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27505 # pragma GCC diagnostic push 27506 # pragma GCC diagnostic ignored "-Wformat-nonliteral" 27511 const char *msg, va_list args) {
27513 #ifdef UA_ENABLE_MULTITHREADING 27514 pthread_mutex_lock(&printf_mutex);
27516 printf(
"[%.23s] %s/%s\t", t.
data, LogLevelNames[level], LogCategoryNames[category]);
27517 vprintf(msg, args);
27520 #ifdef UA_ENABLE_MULTITHREADING 27521 pthread_mutex_unlock(&printf_mutex);
27523 UA_ByteString_deleteMembers(&t);
27526 #if (defined(__GNUC__) && defined(__GNUC_MINOR__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6) || \ 27528 # pragma GCC diagnostic pop 27543 .sendBufferSize = 65535,
27544 .recvBufferSize = 65535,
27545 .maxMessageSize = 0,
27553 #define MANUFACTURER_NAME "open62541" 27554 #define PRODUCT_NAME "open62541 OPC UA Server" 27555 #define PRODUCT_URI "http://open62541.org" 27556 #define APPLICATION_NAME "open62541-based OPC UA Application" 27557 #define APPLICATION_URI "urn:unconfigured:application" 27559 #define UA_STRING_STATIC(s) {sizeof(s)-1, (UA_Byte*)s} 27560 #define UA_STRING_STATIC_NULL {0, NULL} 27562 #define STRINGIFY(arg) #arg 27563 #define VERSION(MAJOR, MINOR, PATCH, LABEL) \ 27564 STRINGIFY(MAJOR) "." STRINGIFY(MINOR) "." STRINGIFY(PATCH) LABEL 27585 .applicationDescription = {
27593 .discoveryUrlsSize = 0,
27594 .discoveryUrls =
NULL },
27598 .networkLayersSize = 0,
27599 .networkLayers =
NULL,
27602 .enableAnonymousLogin =
true,
27603 .enableUsernamePasswordLogin =
true,
27605 .usernamePasswordLoginsSize = 2,
27608 .maxSecureChannels = 40,
27609 .maxSecurityTokenLifetime = 10 * 60 * 1000,
27612 .maxSessions = 100,
27613 .maxSessionTimeout = 60.0 * 60.0 * 1000.0,
27616 .publishingIntervalLimits = { .min = 100.0, .max = 3600.0 * 1000.0 },
27617 .lifeTimeCountLimits = { .max = 15000, .min = 3 },
27618 .keepAliveCountLimits = { .max = 100, .min = 1 },
27619 .maxNotificationsPerPublish = 1000,
27620 .maxRetransmissionQueueSize = 0,
27623 .samplingIntervalLimits = { .min = 50.0, .max = 24.0 * 3600.0 * 1000.0 },
27624 .queueSizeLimits = { .max = 100, .min = 1 }
27633 .secureChannelLifeTime = 10 * 60 * 1000,
27635 .localConnectionConfig = {
27636 .protocolVersion = 0,
27637 .sendBufferSize = 65535,
27638 .recvBufferSize = 65535,
27639 .maxMessageSize = 0,
27648 #ifdef UA_ENABLE_SUBSCRIPTIONS 27650 const UA_SubscriptionSettings UA_SubscriptionSettings_standard = {
27651 .requestedPublishingInterval = 500.0,
27652 .requestedLifetimeCount = 10000,
27653 .requestedMaxKeepAliveCount = 1,
27654 .maxNotificationsPerPublish = 10,
27655 .publishingEnabled =
true,
UA_EndpointDescription * serverEndpoints
UA_SecureChannel * channel
#define UA_NS0ID_BROWSENEXTREQUEST_ENCODING_DEFAULTBINARY
#define LIST_HEAD(name, type)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXQUERYCONTINUATIONPOINTS
#define UA_NS0ID_UNREGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode UA_Server_addReference(UA_Server *server, const UA_NodeId sourceId, const UA_NodeId refTypeId, const UA_ExpandedNodeId targetId, UA_Boolean isForward)
void Service_TranslateBrowsePathsToNodeIds(UA_Server *server, UA_Session *session, const UA_TranslateBrowsePathsToNodeIdsRequest *request, UA_TranslateBrowsePathsToNodeIdsResponse *response)
UA_StatusCode UA_Client_connect_username(UA_Client *client, const char *endpointUrl, const char *username, const char *password)
size_t subscriptionIdsSize
UA_ResponseHeader responseHeader
UA_NodeId authenticationToken
#define UA_NS0ID_SERVERTYPE
#define UA_STATUSCODE_BADSHELVINGTIMEOUTOFRANGE
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_MODIFYMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode(* recv)(UA_Connection *connection, UA_ByteString *response, UA_UInt32 timeout)
size_t continuationPointsSize
#define UA_TYPES_SETMONITORINGMODERESPONSE
UA_VariantStorageType storageType
UA_SecureChannelManager secureChannelManager
void UA_Variant_setScalar(UA_Variant *v, void *UA_RESTRICT p, const UA_DataType *type)
#define UA_STATUSCODE_BADDEADBANDFILTERINVALID
#define UA_STATUSCODE_UNCERTAININITIALVALUE
#define UA_EXPORT
Function Export On Win32: Define UA_DYNAMIC_LINKING and UA_DYNAMIC_LINKING_EXPORT in order to export ...
#define UA_NodeStore_newVariableTypeNode()
#define UA_STATUSCODE_BADVIEWPARAMETERMISMATCH
#define UA_NS0ID_ENUMERATION
struct UA_ExtensionObject::@1::@2 encoded
uint32_t UA_UInt32
UInt32 ^^^^^^ An integer value between 0 and 4 294 967 295.
#define UA_TYPES_METHODATTRIBUTES
#define UA_BINARY_OVERLAYABLE_INTEGER
String Manipulation The header string.h is defined in the C-standard.
#define UA_STATUSCODE_BADDEVICEFAILURE
#define UA_NS0ID_FROMSTATE
void UA_SecureChannel_revolveTokens(UA_SecureChannel *channel)
#define UA_NS0ID_SERVERSTATUSDATATYPE
#define UA_TYPES_SIGNATUREDATA
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINSUFFICIENTCLIENTPROFILE
UA_QualifiedName targetName
#define UA_STATUSCODE_BADEVENTFILTERINVALID
#define UA_NS0ID_BUILDINFO
#define container_of(ptr, type, member)
UA_StatusCode UA_Server_forEachChildNodeCall(UA_Server *server, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
ApplicationDescription ^^^^^^^^^^^^^^^^^^^^^^ Describes an application and how to find it...
#define UA_NS0ID_SERVER_VENDORSERVERINFO
void Service_DeleteNodes(UA_Server *server, UA_Session *session, const UA_DeleteNodesRequest *request, UA_DeleteNodesResponse *response)
UA_NodeId referenceTypeId
UA_BrowsePathResult UA_Server_translateBrowsePathToNodeIds(UA_Server *server, const UA_BrowsePath *browsePath)
#define UA_NodeStore_newVariableNode()
#define UA_NS0ID_FINDSERVERSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_QUERYDATASET
#define UA_OPEN62541_VER_LABEL
#define UA_STATUSCODE_BADSERVERNOTCONNECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME
#define UA_NS0ID_ORGANIZES
#define UA_STATUSCODE_UNCERTAINDATASUBNORMAL
UA_ApplicationType
ApplicationType ^^^^^^^^^^^^^^^ The types of applications.
const UA_EXPORT UA_ConnectionConfig UA_ConnectionConfig_standard
UA_StatusCode UA_NodeStore_remove(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_MonitoredItemNotification * monitoredItems
#define UA_STATUSCODE_GOODDATAIGNORED
#define UA_STATUSCODE_BADENCODINGERROR
#define UA_TYPES_DELETEMONITOREDITEMSREQUEST
#define UA_TYPES_SETPUBLISHINGMODEREQUEST
void UA_Subscription_publishCallback(UA_Server *server, UA_Subscription *sub)
#define UA_TYPES_MODIFYMONITOREDITEMSREQUEST
#define UA_STATUSCODE_BADCERTIFICATEINVALID
UA_ByteString incompleteMessage
#define UA_TYPES_DELETEREFERENCESITEM
void(* UA_Service)(UA_Server *, UA_Session *, const void *request, void *response)
UA_StatusCode innerStatusCode
UA_NodeStore * UA_NodeStore_new(void)
Nodestore Lifecycle ^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_SIGNEDSOFTWARECERTIFICATE
#define LIST_NEXT(elm, field)
UA_AddNodesItem * nodesToAdd
UA_MonitoredItem * UA_MonitoredItem_new(void)
UA_Boolean UA_Guid_equal(const UA_Guid *g1, const UA_Guid *g2)
AddReferencesItem ^^^^^^^^^^^^^^^^^ A request to add a reference to the server address space...
UA_StatusCode UA_SecureChannelManager_close(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_TYPES_READVALUEID
#define UA_TYPES_BROWSEPATH
UA_Boolean containsNoLoops
UA_ByteString serverCertificate
void UA_Client_reset(UA_Client *client)
#define UA_NS0ID_REFERENCETYPESFOLDER
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
RelativePath ^^^^^^^^^^^^ A relative path constructed from reference types and browse names...
TranslateBrowsePathsToNodeIdsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more path...
UA_QualifiedName browseName
#define UA_STATUSCODE_BADCONDITIONALREADYDISABLED
struct UA_NodeStoreEntry * orig
UA_DeleteNodesItem * nodesToDelete
#define UA_STATUSCODE_BADDUPLICATEREFERENCENOTALLOWED
#define UA_STATUSCODE_UNCERTAINREFERENCENOTDELETED
UA_String UA_ByteString
ByteString ^^^^^^^^^^ A sequence of octets.
#define UA_STATUSCODE_BADINDEXRANGEINVALID
#define UA_NS0ID_QUALIFIEDNAME
UA_StatusCode UA_Client_manuallyRenewSecureChannel(UA_Client *client)
UA_UInt32 * subscriptionIds
UA_StatusCode Subscription_unregisterPublishJob(UA_Server *server, UA_Subscription *sub)
#define UA_STATUSCODE_BADCERTIFICATEUNTRUSTED
void(* UA_deleteMembersSignature)(void *p, const UA_DataType *type)
CreateSessionRequest ^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
UA_String securityPolicyUri
void UA_Server_deleteAllRepeatedJobs(UA_Server *server)
#define UA_NS0ID_OBJECTSFOLDER
#define MAXBACKLOG
For the multithreaded mode, assume a single thread that periodically "gets work" from the network lay...
struct UA_ExtensionObject::@1::@3 decoded
#define UA_STATUSCODE_BADCONTINUATIONPOINTINVALID
QueryFirstRequest ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION
UA_StatusCode UA_Server_editNode(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId, UA_EditNodeCallback callback, const void *data)
#define UA_TYPES_GUID
Guid ^^^^.
#define UA_STATUSCODE_BADCONDITIONDISABLED
FindServersRequest ^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
#define UA_NS0ID_TRANSLATEBROWSEPATHSTONODEIDSREQUEST_ENCODING_DEFAULTBINARY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADOUTOFSERVICE
#define TAILQ_REMOVE(head, elm, field)
AddNodesItem ^^^^^^^^^^^^ A request to add a node to the server address space.
#define UA_STATUSCODE_BADCONNECTIONREJECTED
struct ServerNetworkLayerTCP::ConnectionMapping * mappings
UA_ExtensionObjectEncoding encoding
UA_ByteString continuationPoint
void UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection, const UA_ByteString *message)
#define UA_NodeStore_newObjectTypeNode()
#define CHECK_NODECLASS(CLASS)
CreateMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_Job::@5::@6 binaryMessage
#define TAILQ_FOREACH(var, head, field)
UA_StatusCode UA_Client_NamespaceGetIndex(UA_Client *client, UA_String *namespaceUri, UA_UInt16 *namespaceIndex)
#define CHECK_DATATYPE_ARRAY(EXP_DT)
ServiceFault ^^^^^^^^^^^^ The response returned by all services when there is a service level error...
#define UA_NS0ID_CREATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_TCPACKNOWLEDGEMESSAGE
#define UA_STATUSCODE_BADDISCONNECT
#define UA_NS0ID_VARIABLETYPESFOLDER
UA_StatusCode UA_SecureChannel_processChunks(UA_SecureChannel *channel, const UA_ByteString *chunks, UA_ProcessMessageCallback callback, void *application)
#define UA_TYPES_WRITEREQUEST
UA_CallMethodResult UA_EXPORT UA_Server_call(UA_Server *server, const UA_CallMethodRequest *request)
Method Call
#define UA_STATUSCODE_BADINTERNALERROR
UA_MonitoringMode
MonitoringMode ^^^^^^^^^^^^^^.
CreateSubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
struct UA_MonitoredItem UA_MonitoredItem
UA_ChannelSecurityToken securityToken
#define UA_TYPES_ACTIVATESESSIONREQUEST
#define UA_TYPES_GETENDPOINTSREQUEST
bool UA_Boolean
Boolean ^^^^^^^ A two-state logical value (true or false).
#define UA_TYPES_DATAVALUE
DataValue ^^^^^^^^^.
void UA_Client_delete(UA_Client *client)
#define UA_NS0ID_BASEDATATYPE
#define UA_STATUSCODE_UNCERTAINREFERENCEOUTOFSERVER
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_INT16
Int16 ^^^^^.
#define SIMPLEQ_ENTRY(type)
#define UA_TRANSPORT_TCPHELLOMESSAGE
UA_DateTime UA_DateTime_now(void)
DataTypeAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a data type node.
#define UA_INLINE
Inline Functions
UA_UInt32 revisedLifetime
TcpAcknowledgeMessage ^^^^^^^^^^^^^^^^^^^^^ Acknowledge Message.
UA_StatusCode UA_SessionManager_createSession(UA_SessionManager *sm, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_Session **session)
UA_StatusCode UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_VariableAttributes attr, const UA_DataSource dataSource, UA_NodeId *outNewNodeId)
UA_StatusCode UA_Client_connect(UA_Client *client, const char *endpointUrl)
UA_StatusCode UA_Client_disconnect(UA_Client *client)
const UA_ExpandedNodeId UA_EXPANDEDNODEID_NULL
#define UA_TYPES_PUBLISHREQUEST
struct MonitoredItem_queuedValue MonitoredItem_queuedValue
const UA_DataType * responseType
UA_RelativePathElement * elements
QueryNextRequest ^^^^^^^^^^^^^^^^.
UA_StatusCode UA_Client_forEachChildNodeCall(UA_Client *client, UA_NodeId parentNodeId, UA_NodeIteratorCallback callback, void *handle)
#define UA_STATUSCODE_BADNODEIDUNKNOWN
#define UA_TYPES_OPENSECURECHANNELREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS_STATE
#define UA_STATUSCODE_BADWOULDBLOCK
UA_StatusCode UA_NodeStore_insert(UA_NodeStore *ns, UA_Node *node)
Insert / Get / Replace / Remove ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_HASENCODING
#define UA_NS0ID_NONHIERARCHICALREFERENCES
SignatureData ^^^^^^^^^^^^^ A digital signature.
#define UA_TYPES_CLOSESECURECHANNELRESPONSE
DeleteSubscriptionsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADINDEXRANGENODATA
UA_Node * UA_NodeStore_getCopy(UA_NodeStore *ns, const UA_NodeId *nodeid)
UA_Double revisedSessionTimeout
#define UA_STATUSCODE_GOODENTRYREPLACED
size_t UA_readNumber(UA_Byte *buf, size_t buflen, UA_UInt32 *number)
size_t subscriptionIdsSize
UA_UserTokenType tokenType
#define UA_TYPES_WRITERESPONSE
#define UA_STATUSCODE_BADMONITOREDITEMFILTERINVALID
double UA_Double
Double ^^^^^^ An IEEE double precision (64 bit) floating point value.
MonitoredItemModifyResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_LOG_INFO_SESSION(LOGGER, SESSION, MSG,...)
#define SLIST_FOREACH_SAFE(var, head, field, tvar)
UA_MonitoredItemCreateResult * results
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADSTATENOTACTIVE
#define UA_STATUSCODE_BADTARGETNODEIDINVALID
#define SLIST_REMOVE(head, elm, type, field)
#define UA_TYPES_MODIFYSUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADDIALOGNOTACTIVE
#define UA_NS0ID_HASMODELLINGRULE
UA_StatusCode __UA_Server_read(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, void *v)
#define UA_NS0ID_SERVER_AUDITING
#define UA_STATUSCODE_BADBROWSENAMEDUPLICATED
#define UA_TYPES_SUBSCRIPTIONACKNOWLEDGEMENT
ReferenceDescription ^^^^^^^^^^^^^^^^^^^^ The description of a reference.
UA_UInt16 sourcePicoseconds
#define UA_TYPES_USERIDENTITYTOKEN
#define UA_STATUSCODE_BADINVALIDSELFREFERENCE
#define UA_STATUSCODE_GOODMOREDATA
#define SLIST_ENTRY(type)
UA_ResponseHeader responseHeader
UA_String transportProfileUri
#define UA_STATUSCODE_BADTOOMANYMATCHES
#define UA_NS0ID_SERVER_SERVERREDUNDANCY
void Service_UnregisterNodes(UA_Server *server, UA_Session *session, const UA_UnregisterNodesRequest *request, UA_UnregisterNodesResponse *response)
#define UA_TYPES_INT32
Int32 ^^^^^.
#define UA_NodeStore_newReferenceTypeNode()
#define UA_STATUSCODE_BADRESPONSETOOLARGE
#define UA_NS0ID_ADDREFERENCESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADUSERSIGNATUREINVALID
const UA_ObjectTypeNode * getObjectNodeType(UA_Server *server, const UA_ObjectNode *node)
BrowseNextRequest ^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
UA_ResponseHeader responseHeader
size_t UA_calcSizeBinary(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADREFERENCETYPEIDINVALID
UA_Guid UA_Guid_random(void)
UA_StatusCode MonitoredItem_registerSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOKED
#define UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID
#define SIMPLEQ_FIRST(head)
UA_BrowsePathResult * results
const UA_encodeBinarySignature encodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
UA_StatusCode getTypeHierarchy(UA_NodeStore *ns, const UA_Node *rootRef, UA_Boolean inverse, UA_NodeId **typeHierarchy, size_t *typeHierarchySize)
UA_Boolean publishingEnabled
#define UA_TYPES_COUNT
Every type is assigned an index in an array containing the type descriptions.
UA_Session * UA_SecureChannel_getSession(UA_SecureChannel *channel, UA_NodeId *token)
UA_ResponseHeader responseHeader
#define UA_OPEN62541_VER_MAJOR
Library Version
#define UA_NS0ID_HASPROPERTY
DeleteReferencesRequest ^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server address...
Argument ^^^^^^^^ An argument for a method.
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_LOCALE
size_t subscriptionAcknowledgementsSize
UA_Boolean publishingEnabled
#define UA_NS0ID_HASDESCRIPTION
UA_UInt16 memberTypeIndex
UserNameIdentityToken ^^^^^^^^^^^^^^^^^^^^^ A token representing a user identified by a user name and...
UA_UInt32 * arrayDimensions
UA_StatusCode writeDataTypeAttribute(UA_Server *server, UA_VariableNode *node, const UA_NodeId *dataType, const UA_NodeId *constraintDataType)
#define UA_TYPES_CLOSESESSIONRESPONSE
#define UA_NS0ID_MODIFYSUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
void Service_ActivateSession(UA_Server *server, UA_SecureChannel *channel, UA_Session *session, const UA_ActivateSessionRequest *request, UA_ActivateSessionResponse *response)
#define UA_STATUSCODE_BADNOCONTINUATIONPOINTS
UA_StatusCode UA_SessionManager_removeSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_HASORDEREDCOMPONENT
#define UA_TYPES_DATACHANGEFILTER
#define UA_STATUSCODE_BADTYPEMISMATCH
UA_RequestHeader requestHeader
UA_BrowseDirection browseDirection
UA_NodeId referenceTypeId
#define UA_STATUSCODE_BADTCPINTERNALERROR
#define UA_STATUSCODE_BADTCPMESSAGETOOLARGE
void * UA_Array_new(size_t size, const UA_DataType *type)
CallMethodResult ^^^^^^^^^^^^^^^^.
#define UA_TYPES_UINT32
UInt32 ^^^^^^.
UA_UInt16 UA_Server_addNamespace(UA_Server *server, const char *name)
UA_StatusCode compatibleArrayDimensions(size_t constraintArrayDimensionsSize, const UA_UInt32 *constraintArrayDimensions, size_t testArrayDimensionsSize, const UA_UInt32 *testArrayDimensions)
TcpErrorMessage ^^^^^^^^^^^^^^^ Error Message.
#define UA_STATUSCODE_BADNOTIMPLEMENTED
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Byte accessLevel
UA_ExtensionObjectEncoding
UA_VARIANT_ENCODINGMASKTYPE
#define UA_TYPES_BYTESTRING
ByteString ^^^^^^^^^^.
SignedSoftwareCertificate ^^^^^^^^^^^^^^^^^^^^^^^^^ A software certificate with a digital signature...
#define UA_STATUSCODE_BADVIEWIDUNKNOWN
#define UA_STATUSCODE_BADNODEATTRIBUTESINVALID
#define UA_TYPES_UINT64
UInt64 ^^^^^^.
UA_LocalizedText displayName
#define UA_STATUSCODE_BADDATALOST
#define UA_STATUSCODE_BADDEPENDENTVALUECHANGED
#define UA_NS0ID_SERVER_SERVERSTATUS_SECONDSTILLSHUTDOWN
UA_Boolean UA_Node_hasSubTypeOrInstances(const UA_Node *node)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYCLIENT
#define UA_STATUSCODE_BADCERTIFICATEHOSTNAMEINVALID
#define UA_STATUSCODE_GOODCALLAGAIN
UA_UInt32 maxRequestMessageSize
UA_String UA_String_fromChars(char const src[])
#define CHECK_NODECLASS_WRITE(CLASS)
const UA_DataType * UA_findDataType(const UA_NodeId *typeId)
Builtin data types can be accessed as UA_TYPES[UA_TYPES_XXX], where XXX is the name of the data type...
#define UA_STATUSCODE_BADDATAENCODINGINVALID
UA_StatusCode UA_SecureChannel_generateNonce(UA_ByteString *nonce)
const UA_NodeId UA_NODEID_NULL
UA_ExtensionObject filter
#define UA_STATUSCODE_BADCERTIFICATECHAININCOMPLETE
#define UA_STATUSCODE_BADSESSIONIDINVALID
uint16_t UA_UInt16
UInt16 ^^^^^^ An integer value between 0 and 65 535.
#define UA_STATUSCODE_BADBROWSENAMEINVALID
#define UA_STATUSCODE_GOODNODATA
#define UA_NS0ID_UINTEGER
#define UA_NS0ID_HASCAUSE
UA_LocalizedText inverseName
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXBROWSECONTINUATIONPOINTS
#define UA_NS0ID_BASEDATAVARIABLETYPE
UA_ExtensionObject nodeAttributes
UA_Boolean hasLocalizedText
OpenSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
void Service_Read_single(UA_Server *server, UA_Session *session, UA_TimestampsToReturn timestamps, const UA_ReadValueId *id, UA_DataValue *v)
UA_ClientState UA_Client_getState(UA_Client *client)
UA_StatusCode UA_Server_delayedFree(UA_Server *server, void *data)
#define UA_STATUSCODE_BADTIMESTAMPNOTSUPPORTED
UA_Boolean hasSourcePicoseconds
struct UA_DiagnosticInfo * innerDiagnosticInfo
AddNodesRequest ^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_LOG_DEBUG_SESSION(LOGGER, SESSION, MSG,...)
#define UA_TYPES_CREATESUBSCRIPTIONREQUEST
#define UA_NS0ID_VIEWSFOLDER
#define UA_TYPES_CALLMETHODRESULT
UA_AsymmetricAlgorithmSecurityHeader clientAsymAlgSettings
#define UA_TYPES_PUBLISHRESPONSE
UA_QualifiedName browseName
UA_SecurityTokenRequestType requestType
#define ADDPROFILEARRAY(x)
UA_StatusCode UA_Subscription_deleteMonitoredItem(UA_Server *server, UA_Subscription *sub, UA_UInt32 monitoredItemID)
UA_UInt32 protocolVersion
#define UA_TYPES_RELATIVEPATH
UA_StatusCode UA_SecureChannelManager_open(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
#define UA_NS0ID_GENERATESEVENT
#define UA_NS0ID_GETENDPOINTSREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_BROWSERESPONSE
#define UA_TYPES_FINDSERVERSRESPONSE
#define UA_STATUSCODE_BADTIMEOUT
UA_Double revisedPublishingInterval
#define UA_TYPES_MODIFYSUBSCRIPTIONREQUEST
AddNodesResponse ^^^^^^^^^^^^^^^^ Adds one or more nodes to the server address space.
#define UA_STATUSCODE_BADNOVALIDCERTIFICATES
#define UA_TYPES_SBYTE
SByte ^^^^^.
struct channel_list_entry channel_list_entry
#define UA_TYPES_ADDNODESITEM
void Service_DeleteMonitoredItems(UA_Server *server, UA_Session *session, const UA_DeleteMonitoredItemsRequest *request, UA_DeleteMonitoredItemsResponse *response)
SetPublishingModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
UA_NodeId referenceTypeId
const UA_Guid UA_GUID_NULL
#define UA_STATUSCODE_BADMONITOREDITEMFILTERUNSUPPORTED
UA_String * discoveryUrls
#define UA_TYPES_DELETENODESRESPONSE
UA_ByteString serverNonce
UA_BrowseResult UA_Server_browse(UA_Server *server, UA_UInt32 maxrefs, const UA_BrowseDescription *descr)
Browsing
UA_Double requestedPublishingInterval
#define TAILQ_LAST(head, headname)
UA_StatusCode readValueAttribute(UA_Server *server, const UA_VariableNode *vn, UA_DataValue *v)
#define UA_STATUSCODE_BADREQUESTCANCELLEDBYREQUEST
void UA_NodeStore_deleteNode(UA_Node *node)
#define UA_NS0ID_SERVERCAPABILITIESTYPE
RegisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a ses...
UA_ResponseHeader responseHeader
UA_MonitoredItemModifyResult * results
size_t registeredNodeIdsSize
DeleteMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_StatusCode writeValueAttribute(UA_Server *server, UA_VariableNode *node, const UA_DataValue *value, const UA_String *indexRange)
#define UA_TYPES_CONTENTFILTER
#define UA_TRANSPORT_MESSAGETYPE
UA_UInt32 secondsTillShutdown
#define UA_NS0ID_PUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_ARGUMENT
#define TAILQ_INSERT_HEAD(head, elm, field)
void UA_Array_delete(void *p, size_t size, const UA_DataType *type)
#define UA_STATUSCODE_BADNOTCONNECTED
#define UA_TYPES_ADDREFERENCESITEM
#define UA_STATUSCODE_BADSERVERHALTED
ContentFilterResult ^^^^^^^^^^^^^^^^^^^.
ReferenceNode ^^^^^^^^^^^^^ Specifies a reference which belongs to a node.
#define UA_TYPES_MESSAGESECURITYMODE
UA_DataChangeTrigger trigger
UA_EndpointDescription * endpoints
UA_ByteString clientNonce
UA_AddReferencesItem * referencesToAdd
#define UA_STATUSCODE_BADREQUESTTIMEOUT
UA_Boolean includeSubtypes
#define UA_NS0ID_HASCOMPONENT
#define UA_STATUSCODE_BADOUTOFRANGE
#define UA_STATUSCODE_BADQUERYTOOCOMPLEX
UA_UInt32 retransmitSequenceNumber
UA_ExpandedNodeId typeDefinition
#define UA_STATUSCODE_BADHISTORYOPERATIONINVALID
UA_StatusCode Subscription_registerPublishJob(UA_Server *server, UA_Subscription *sub)
UA_MonitoringParameters requestedParameters
GetEndpointsResponse ^^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
#define UA_STATUSCODE_BADREFRESHINPROGRESS
UA_ApplicationDescription * servers
#define UA_TYPES_ADDNODESREQUEST
UA_ChannelSecurityToken securityToken
#define UA_TYPES_CREATESESSIONRESPONSE
CallResponse ^^^^^^^^^^^^.
uint64_t UA_UInt64
UInt64 ^^^^^^ An integer value between 0 and 18 446 744 073 709 551 615.
#define UA_TYPES_DELETEREFERENCESRESPONSE
#define UA_STATUSCODE_BADFILTERELEMENTINVALID
#define UA_NODEIDTYPE_NUMERIC_TWOBYTE
#define TAILQ_ENTRY(type)
UA_StatusCode UA_Server_setVariableNode_dataSource(UA_Server *server, const UA_NodeId nodeId, const UA_DataSource dataSource)
#define UA_STATUSCODE_BADDIALOGRESPONSEINVALID
UA_StatusCode(* UA_exchangeEncodeBuffer)(void *handle, UA_ByteString *buf, size_t offset)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI
SecureConversationMessageAbortBody ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Secure Conversation Message Abo...
SetMonitoringModeRequest ^^^^^^^^^^^^^^^^^^^^^^^^.
void() UA_ProcessMessageCallback(void *application, UA_SecureChannel *channel, UA_MessageType messageType, UA_UInt32 requestId, const UA_ByteString *message)
Chunking
#define UA_STATUSCODE_BADMONITOREDITEMIDINVALID
#define UA_STATUSCODE_BADAGGREGATECONFIGURATIONREJECTED
#define UA_TYPES_FLOAT
Float ^^^^^.
#define UA_STATUSCODE_BADTOOMANYSESSIONS
#define UA_STATUSCODE_BADIDENTITYCHANGENOTSUPPORTED
UA_Double revisedPublishingInterval
UA_Boolean containsNoLoops
void Service_OpenSecureChannel(UA_Server *server, UA_Connection *connection, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
SecureChannel Service Set This Service Set defines Services used to open a communication channel that...
#define UA_TYPES_REPUBLISHRESPONSE
UA_Boolean deleteBidirectional
UA_DateTime sourceTimestamp
size_t(* getJobs)(UA_ServerNetworkLayer *nl, UA_Job **jobs, UA_UInt16 timeout)
UA_DateTime nextChannelRenewal
#define UA_TYPES_MONITOREDITEMMODIFYREQUEST
UA_NodeId authenticationToken
#define UA_LOG_INFO_CHANNEL(LOGGER, CHANNEL, MSG,...)
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_OUTPUTARGUMENTS
void UA_Session_deleteMembersCleanup(UA_Session *session, UA_Server *server)
#define UA_STATUSCODE_GOODNONCRITICALTIMEOUT
DeleteNodesRequest ^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_TYPES_READRESPONSE
#define UA_STATUSCODE_BADNOTSUPPORTED
ContentFilter ^^^^^^^^^^^^^.
UA_Variant * inputArguments
UA_Server * UA_Server_new(const UA_ServerConfig config)
#define UA_LOG_WARNING_SESSION(LOGGER, SESSION, MSG,...)
SetPublishingModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
status(* UA_decodeBinarySignature)(void *UA_RESTRICT dst, const UA_DataType *type)
UA_MessageSecurityMode securityMode
#define UA_NODESTORE_TOMBSTONE
#define UA_STATUSCODE_BADNODEIDEXISTS
size_t userIdentityTokensSize
#define UA_TYPES_MONITOREDITEMCREATEREQUEST
#define UA_STATUSCODE_UNCERTAINSENSORNOTACCURATE
const UA_decodeBinarySignature decodeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NS0ID_WRITEREQUEST_ENCODING_DEFAULTBINARY
size_t notificationDataSize
UA_EndpointDescription * endpointDescriptions
UA_MonitoringParameters requestedParameters
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADINVALIDTIMESTAMPARGUMENT
UA_StatusCode UA_Client_writeArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, const UA_UInt32 *newArrayDimensions, size_t newArrayDimensionsSize)
UA_ResponseHeader responseHeader
QueryDataSet ^^^^^^^^^^^^.
#define UA_TYPES_READREQUEST
void UA_NodeStore_iterate(UA_NodeStore *ns, UA_NodeStore_nodeVisitor visitor)
const UA_EXPORT UA_ClientConfig UA_ClientConfig_standard
#define UA_STATUSCODE_BADAGGREGATELISTMISMATCH
#define UA_STATUSCODE_BADOPERATIONABANDONED
void UA_SecureChannel_init(UA_SecureChannel *channel)
#define UA_TYPES_USERNAMEIDENTITYTOKEN
UA_StatusCode __UA_Server_write(UA_Server *server, const UA_NodeId *nodeId, const UA_AttributeId attributeId, const UA_DataType *attr_type, const void *attr)
#define SLIST_INSERT_HEAD(head, elm, field)
UA_ObjectLifecycleManagement lifecycleManagement
#define UA_TYPES_BROWSEREQUEST
#define UA_STATUSCODE_BADREFERENCELOCALONLY
#define UA_STATUSCODE_BADENCODINGLIMITSEXCEEDED
#define UA_EXPANDEDNODEID_SERVERINDEX_FLAG
void Service_Call(UA_Server *server, UA_Session *session, const UA_CallRequest *request, UA_CallResponse *response)
void UA_SessionManager_cleanupTimedOut(UA_SessionManager *sm, UA_DateTime nowMonotonic)
UA_UInt32 requestedMaxReferencesPerNode
ReferenceTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^^ The attributes for a reference type node...
#define UA_STATUSCODE_BADTOOMANYOPERATIONS
DeleteNodesResponse ^^^^^^^^^^^^^^^^^^^ Delete one or more nodes from the server address space...
#define UA_STATUSCODE_GOODDEPENDENTVALUECHANGED
UA_NodeClass targetNodeClass
UA_ExpandedNodeId typeDefinition
#define UA_NS0ID_SERVER_SERVERREDUNDANCY_REDUNDANCYSUPPORT
UA_Connection * connection
UA_ResponseHeader responseHeader
TranslateBrowsePathsToNodeIdsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Translates one or more pa...
#define UA_LOG_DEBUG_CHANNEL(LOGGER, CHANNEL, MSG,...)
size_t nodesToRegisterSize
UA_Connection UA_ClientConnectionTCP(UA_ConnectionConfig conf, const char *endpointUrl, UA_Logger logger)
UA_Node * UA_NodeStore_newNode(UA_NodeClass nodeClass)
Node Lifecycle ^^^^^^^^^^^^^^.
#define UA_NS0ID_DATATYPESFOLDER
UA_Boolean isNodeInTree(UA_NodeStore *ns, const UA_NodeId *leafNode, const UA_NodeId *nodeToFind, const UA_NodeId *referenceTypeIds, size_t referenceTypeIdsSize)
#define UA_STATUSCODE_BADMESSAGENOTAVAILABLE
#define UA_TYPES_ADDNODESRESPONSE
void Service_Publish(UA_Server *server, UA_Session *session, const UA_PublishRequest *request, UA_UInt32 requestId)
UA_StatusCode UA_Variant_setRangeCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_NumericRange range)
#define UA_TYPES_PARSINGRESULT
#define UA_PRINTF_GUID_DATA(GUID)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MINSUPPORTEDSAMPLERATE
void UA_SecureChannelManager_deleteMembers(UA_SecureChannelManager *cm)
#define UA_ASSERT_RCU_UNLOCKED()
#define UA_SEC_TO_DATETIME
void(* UA_ServerCallback)(UA_Server *server, void *data)
UA_UInt32 maxResponseMessageSize
UA_StatusCode UA_Server_run_startup(UA_Server *server)
ViewDescription ^^^^^^^^^^^^^^^ The view to browse.
#define UA_NS0ID_REFERENCES
#define UA_NS0ID_DELETENODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADREQUESTINTERRUPTED
void(* UA_NodeStore_nodeVisitor)(const UA_Node *node)
Iteration ^^^^^^^^^ The following definitions are used to call a callback for every node in the nodes...
#define UA_TYPES_STRING
String ^^^^^^.
uint32_t pcg32_random_r(pcg32_random_t *rng)
RepublishResponse ^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_LOCALIZEDTEXT
CreateSubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
BrowseResponse ^^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address spa...
float UA_Float
Float ^^^^^ An IEEE single precision (32 bit) floating point value.
#define UA_NS0ID_HASMODELPARENT
UA_Boolean hasServerTimestamp
UA_NodeStoreEntry ** entries
#define UA_STATUSCODE_BADNOTFOUND
UA_ResponseHeader responseHeader
UA_LocalizedText description
UA_SecureChannel * UA_SecureChannelManager_get(UA_SecureChannelManager *cm, UA_UInt32 channelId)
#define UA_STATUSCODE_BADSERVERNAMEMISSING
#define UA_STATUSCODE_BADDATAUNAVAILABLE
void Service_Browse(UA_Server *server, UA_Session *session, const UA_BrowseRequest *request, UA_BrowseResponse *response)
UA_Session * UA_SessionManager_getSession(UA_SessionManager *sm, const UA_NodeId *token)
#define UA_NS0ID_XMLELEMENT
void __UA_Client_Service(UA_Client *client, const void *request, const UA_DataType *requestType, void *response, const UA_DataType *responseType)
UA_StatusCode UA_decodeBinary(const UA_ByteString *src, size_t *offset, void *dst, const UA_DataType *type) UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_String UA_DateTime_toString(UA_DateTime t)
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER
#define UA_NS0ID_SERVERDIAGNOSTICSTYPE
#define UA_NS0ID_DELETEREFERENCESREQUEST_ENCODING_DEFAULTBINARY
UA_UInt32 requestedLifetimeCount
void MonitoredItem_delete(UA_Server *server, UA_MonitoredItem *monitoredItem)
#define UA_TYPES_BROWSENEXTREQUEST
UA_Connection * connection
#define VERSION(MAJOR, MINOR, PATCH, LABEL)
void UA_Log_Stdout(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
UA_ResponseHeader responseHeader
UA_MessageSecurityMode securityMode
void UA_Connection_deleteMembers(UA_Connection *connection)
UA_StatusCode UA_EndpointUrl_split_ptr(const char *endpointUrl, char *hostname, const char **port, const char **path)
void Service_CreateSubscription(UA_Server *server, UA_Session *session, const UA_CreateSubscriptionRequest *request, UA_CreateSubscriptionResponse *response)
Subscription Service Set Subscriptions are used to report Notifications to the Client.
#define UA_LOG_TRACE_CHANNEL(LOGGER, CHANNEL, MSG,...)
Log Helper
#define UA_STATUSCODE_BADEXPECTEDSTREAMTOBLOCK
#define UA_STATUSCODE_BADSTRUCTUREMISSING
UA_StatusCode __UA_Client_writeAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, const void *in, const UA_DataType *inDataType)
#define UA_NS0ID_HASEFFECT
void Service_CreateMonitoredItems(UA_Server *server, UA_Session *session, const UA_CreateMonitoredItemsRequest *request, UA_CreateMonitoredItemsResponse *response)
MonitoredItem Service Set Clients define MonitoredItems to subscribe to data and Events.
UA_DeleteReferencesItem * referencesToDelete
void Service_Read(UA_Server *server, UA_Session *session, const UA_ReadRequest *request, UA_ReadResponse *response)
Query Service Set This Service Set is used to issue a Query to a Server.
#define UA_TYPES_WRITEVALUE
#define UA_SECURE_MESSAGE_HEADER_LENGTH
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE
ObjectTypeAttributes ^^^^^^^^^^^^^^^^^^^^ The attributes for an object type node. ...
UA_ExtensionObject userIdentityToken
UA_StatusCode UA_Server_deleteReference(UA_Server *server, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
UA_Boolean UA_String_equal(const UA_String *s1, const UA_String *s2)
UserTokenPolicy ^^^^^^^^^^^^^^^ Describes a user token that can be used with a server.
UA_ResponseHeader responseHeader
UA_Boolean hasInnerDiagnosticInfo
#define UA_STATUSCODE_BADENTRYEXISTS
#define CHECK_DATATYPE_SCALAR(EXP_DT)
#define UA_STATUSCODE_BADVIEWVERSIONINVALID
struct UA_DelayedJob UA_DelayedJob
#define UA_NS0ID_HASSUBTYPE
UA_BrowseResultMask
BrowseResultMask ^^^^^^^^^^^^^^^^ A bit mask which specifies what should be returned in a browse resp...
#define UA_TYPES_USERTOKENTYPE
UA_RequestHeader requestHeader
#define UA_TYPES_ADDREFERENCESRESPONSE
UA_UInt32 revisedMaxKeepAliveCount
void(* deleteMembers)(UA_ServerNetworkLayer *nl)
Deletes the network content.
UA_StatusCode UA_Client_readArrayDimensionsAttribute(UA_Client *client, const UA_NodeId nodeId, UA_UInt32 **outArrayDimensions, size_t *outArrayDimensionsSize)
UA_ValueSource
VariableNode
#define UA_TYPES_CLOSESESSIONREQUEST
#define UA_TYPES_DELETESUBSCRIPTIONSRESPONSE
UA_UInt32 protocolVersion
UA_ResponseHeader responseHeader
void Service_Call_single(UA_Server *server, UA_Session *session, const UA_CallMethodRequest *request, UA_CallMethodResult *result)
UA_UInt16 UA_Server_run_iterate(UA_Server *server, UA_Boolean waitInternal)
#define UA_NS0ID_ADDNODESREQUEST_ENCODING_DEFAULTBINARY
void * UA_new(const UA_DataType *type)
The following functions are used for generic handling of data types.
UA_UInt32 requestedMaxKeepAliveCount
#define UA_STATUSCODE_BADSECURECHANNELTOKENUNKNOWN
#define UA_STATUSCODE_BADSERVERURIINVALID
#define UA_NS0ID_DATAVALUE
FindServersResponse ^^^^^^^^^^^^^^^^^^^ Finds the servers known to the discovery server.
UA_StatusCode UA_Server_setVariableNode_valueCallback(UA_Server *server, const UA_NodeId nodeId, const UA_ValueCallback callback)
#define UA_STATUSCODE_BADNODENOTINVIEW
UA_StatusCode __UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_InstantiationCallback *instantiationCallback, UA_NodeId *outNewNodeId)
size_t outputArgumentsSize
CloseSessionResponse ^^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_TYPES_FINDSERVERSREQUEST
UA_StatusCode UA_Server_run(UA_Server *server, volatile UA_Boolean *running)
#define MANUFACTURER_NAME
UA_UInt32 maxResponseMessageSize
UA_DateTime serverTimestamp
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
UA_String UA_XmlElement
XmlElement ^^^^^^^^^^ An XML element.
NodeAttributes ^^^^^^^^^^^^^^ The base attributes for all nodes.
NotificationMessage ^^^^^^^^^^^^^^^^^^^.
UA_ExpandedNodeId parentNodeId
#define UA_TYPES_REPUBLISHREQUEST
#define UA_STATUSCODE_BADSECURECHANNELIDINVALID
UA_NodeId referenceTypeId
#define UA_USEC_TO_DATETIME
#define UA_NS0ID_PROPERTYTYPE
UA_UInt16 availableContinuationPoints
void Service_CloseSession(UA_Server *server, UA_Session *session, const UA_CloseSessionRequest *request, UA_CloseSessionResponse *response)
#define UA_TYPES_BROWSEPATHRESULT
#define UA_TRANSPORT_SYMMETRICALGORITHMSECURITYHEADER
#define UA_NS0ID_HASTYPEDEFINITION
#define UA_MINMESSAGESIZE
#define UA_PRINTF_STRING_DATA(STRING)
#define UA_NS0ID_HIERARCHICALREFERENCES
UA_UInt32 revisedLifetimeCount
UA_BrowsePathTarget * targets
Networking Client-server connection is represented by a UA_Connection structure.
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO
#define UA_NS0ID_TYPESFOLDER
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS_ENABLEDFLAG
UA_UInt32 * monitoredItemIds
UA_WriteValue * nodesToWrite
#define UA_TYPES_DELETENODESITEM
UA_DataValue UA_Server_read(UA_Server *server, const UA_ReadValueId *item, UA_TimestampsToReturn timestamps)
Reading and Writing Node Attributes The functions for reading and writing node attributes call the re...
#define UA_STATUSCODE_BADTOOMANYARGUMENTS
#define UA_NS0ID_CREATESUBSCRIPTIONREQUEST_ENCODING_DEFAULTBINARY
DataChangeFilter ^^^^^^^^^^^^^^^^.
UA_MonitoredItemCreateRequest * itemsToCreate
#define UA_STATUSCODE_BADBOUNDNOTFOUND
MethodAttributes ^^^^^^^^^^^^^^^^ The attributes for a method node.
UnregisterNodesRequest ^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
#define UA_NS0ID_BYTESTRING
#define UA_STATUSCODE_BADNOCOMMUNICATION
#define UA_TYPES_SERVERSTATUSDATATYPE
#define UA_STATUSCODE_BADTIMESTAMPSTORETURNINVALID
#define UA_TYPES_DATACHANGENOTIFICATION
#define UA_LOCALIZEDTEXT_ENCODINGMASKTYPE_TEXT
#define UA_STRING_STATIC_NULL
#define UA_STATUSCODE_BADINVALIDARGUMENT
void Service_SetMonitoringMode(UA_Server *server, UA_Session *session, const UA_SetMonitoringModeRequest *request, UA_SetMonitoringModeResponse *response)
void Service_FindServers(UA_Server *server, UA_Session *session, const UA_FindServersRequest *request, UA_FindServersResponse *response)
Discovery Service Set This Service Set defines Services used to discover the Endpoints implemented by...
#define UA_STATUSCODE_GOODPOSTACTIONFAILED
#define UA_STATUSCODE_UNCERTAINSUBNORMAL
UA_StatusCode(* start)(UA_ServerNetworkLayer *nl, UA_Logger logger)
#define UA_fd_isset(fd, fds)
UA_NumericRangeDimension * dimensions
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOODCOMMUNICATIONEVENT
const UA_calcSizeBinarySignature calcSizeBinaryJumpTable[UA_BUILTIN_TYPES_COUNT+1]
#define UA_NODESTORE_MINSIZE
#define UA_STATUSCODE_BADOBJECTDELETED
UA_Boolean hasNamespaceUri
#define UA_STATUSCODE_BADTCPENDPOINTURLINVALID
union UA_ExtensionObject::@1 content
UA_ApplicationDescription server
#define UA_STATUSCODE_GOODSHUTDOWNEVENT
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSRESPONSE
#define UA_STATUSCODE_BADSECURITYMODEREJECTED
#define UA_NS0ID_SERVER_SERVERSTATUS_SHUTDOWNREASON
UA_Boolean deleteTargetReferences
#define UA_TRANSPORT_ASYMMETRICALGORITHMSECURITYHEADER
UA_UInt32 protocolVersion
TcpHelloMessage ^^^^^^^^^^^^^^^ Hello Message.
#define UA_STATUSCODE_BADNODECLASSINVALID
UA_Subscription * UA_Subscription_new(UA_Session *session, UA_UInt32 subscriptionID)
ChannelSecurityToken ^^^^^^^^^^^^^^^^^^^^ The token that identifies a set of keys for an active secur...
UA_Client_Authentication authenticationMethod
#define UA_TYPES_NODEATTRIBUTES
#define UA_TYPES_MODIFYMONITOREDITEMSRESPONSE
#define UA_TYPES_DEADBANDTYPE
Server Configuration The following structure is passed to a new server for configuration.
#define UA_TYPES_REFERENCETYPEATTRIBUTES
#define UA_STATUSCODE_BADCERTIFICATEREVOKED
#define UA_NS0ID_CREATEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADNOMATCH
#define UA_STATUSCODE_GOODEDITED
UA_AttributeId
Standard-Defined Constants This section contains numerical and string constants that are defined in t...
#define TAILQ_FIRST(head)
#define UA_TYPES_CALLREQUEST
ViewAttributes ^^^^^^^^^^^^^^ The attributes for a view node.
#define UA_ASSERT_RCU_LOCKED()
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEHEADER
#define UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME
enum UA_NodeIdType identifierType
#define UA_STATUSCODE_BADTOOMANYSUBSCRIPTIONS
#define UA_STATUSCODE_BADSEMPAHOREFILEMISSING
#define UA_STATUSCODE_BADDISCOVERYURLMISSING
UA_BrowseDescription * nodesToBrowse
#define UA_NS0ID_MODELLINGRULE_MANDATORY
DeleteNodesItem ^^^^^^^^^^^^^^^ A request to delete a node to the server address space.
#define UA_NodeStore_newDataTypeNode()
UA_CallMethodRequest * methodsToCall
struct UA_NodeStoreEntry UA_NodeStoreEntry
UA_MessageSecurityMode securityMode
#define UA_LOG_ERROR_CHANNEL(LOGGER, CHANNEL, MSG,...)
UA_MonitoredItemModifyRequest * itemsToModify
int16_t UA_Int16
Int16 ^^^^^ An integer value between -32 768 and 32 767.
UA_StatusCode UA_EndpointUrl_split(const char *endpointUrl, char *hostname, UA_UInt16 *port, const char **path)
EndpointURL Helper ^^^^^^^^^^^^^^^^^^.
UA_Boolean includeSubtypes
#define MAXTIMEOUT
There are four types of job execution:
#define UA_TRANSPORT_CHUNKTYPE
UA_StatusCode UA_Server_deleteNode(UA_Server *server, const UA_NodeId nodeId, UA_Boolean deleteReferences)
#define UA_NS0ID_SERVER_SERVERSTATUS_STARTTIME
#define UA_STATUSCODE_BADCERTIFICATEISSUERTIMEINVALID
void Service_CloseSecureChannel(UA_Server *server, UA_SecureChannel *channel)
UA_NODE_BASEATTRIBUTES UA_NODE_VARIABLEATTRIBUTES UA_Boolean isAbstract
QueryDataDescription ^^^^^^^^^^^^^^^^^^^^.
#define UA_OPEN62541_VER_MINOR
UA_StatusCode UA_SecureChannelManager_init(UA_SecureChannelManager *cm, UA_Server *server)
UA_UInt32 receiveBufferSize
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_ResponseHeader responseHeader
#define UA_TYPES_BYTE
Byte ^^^^.
UA_LocalizedText displayName
BrowseNextResponse ^^^^^^^^^^^^^^^^^^ Continues one or more browse operations.
#define UA_NS0ID_BASEOBJECTTYPE
DeleteReferencesItem ^^^^^^^^^^^^^^^^^^^^ A request to delete a node from the server address space...
int32_t UA_Int32
Int32 ^^^^^ An integer value between -2 147 483 648 and 2 147 483 647.
void UA_Session_updateLifetime(UA_Session *session)
#define UA_STATUSCODE_UNCERTAINDOMINANTVALUECHANGED
MonitoredItemCreateResult ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADSECURECHANNELCLOSED
UA_ConnectionConfig localConf
UA_DateTime UA_DateTime_nowMonotonic(void)
UA_String encryptionAlgorithm
UA_ExpandedNodeId targetId
const UA_String UA_STRING_NULL
#define UA_STATUSCODE_GOODRESULTSMAYBEINCOMPLETE
UA_ByteString * continuationPoints
UA_UInt32 UA_UInt32_random(void)
#define UA_TYPES_MONITORINGPARAMETERS
ExpandedNodeId ^^^^^^^^^^^^^^ A NodeId that allows the namespace URI to be specified instead of an in...
ParsingResult ^^^^^^^^^^^^^.
UA_UInt16 addNamespace(UA_Server *server, const UA_String name)
#define UA_PRINTF_GUID_FORMAT
Convenience macros for complex types ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
CallMethodRequest ^^^^^^^^^^^^^^^^^.
void Service_DeleteSubscriptions(UA_Server *server, UA_Session *session, const UA_DeleteSubscriptionsRequest *request, UA_DeleteSubscriptionsResponse *response)
UA_UInt32 maxNotificationsPerPublish
#define UA_STATUSCODE_BADPROTOCOLVERSIONUNSUPPORTED
#define UA_STATUSCODE_BADSEQUENCENUMBERUNKNOWN
#define UA_realloc(ptr, size)
UA_RequestHeader requestHeader
#define UA_NS0ID_STATUSCODE
UA_ExpandedNodeId targetNodeId
UA_ByteString serverCertificate
ActivateSessionResponse ^^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
VariableAttributes ^^^^^^^^^^^^^^^^^^ The attributes for a variable node.
#define UA_STATUSCODE_BADSERVERINDEXINVALID
UA_IdType
IdType ^^^^^^ The type of identifier used in a node id.
UA_StatusCode UA_Subscription_removeRetransmissionMessage(UA_Subscription *sub, UA_UInt32 sequenceNumber)
void UA_random_seed(UA_UInt64 seed)
Random Number Generator If UA_ENABLE_MULTITHREADING is defined, then the seed is stored in thread loc...
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADREQUESTTYPEINVALID
#define UA_TYPES_SERVICEFAULT
#define UA_TYPES_APPLICATIONTYPE
UA_StatusCode UA_NodeStore_replace(UA_NodeStore *ns, UA_Node *node)
UA_Boolean deleteSubscriptions
const char * LogLevelNames[6]
UA_ChunkType
ChunkType ^^^^^^^^^ Type of the chunk.
UA_UInt16 serverPicoseconds
UA_ApplicationDescription clientDescription
WriteResponse ^^^^^^^^^^^^^.
SubscriptionAcknowledgement ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Server_delete(UA_Server *server)
UA_Double minimumSamplingInterval
UA_StatusCode UA_Variant_setArrayCopy(UA_Variant *v, const void *array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADSYNTAXERROR
#define UA_TYPES_MONITOREDITEMNOTIFICATION
#define UA_STATUSCODE_BADREFERENCENOTALLOWED
UA_CallMethodResult * results
#define UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME
UserIdentityToken ^^^^^^^^^^^^^^^^^ A base type for a user identity token.
UA_StatusCode(* send)(UA_Connection *connection, UA_ByteString *buf)
UA_StatusCode UA_Client_addReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_String targetServerUri, const UA_ExpandedNodeId targetNodeId, UA_NodeClass targetNodeClass)
#define UA_NS0ID_ACTIVATESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_DATACHANGETRIGGER
#define UA_STATUSCODE_BADSEQUENCENUMBERINVALID
QueryNextResponse ^^^^^^^^^^^^^^^^^.
UA_NodeAttributesMask
NodeAttributesMask ^^^^^^^^^^^^^^^^^^ The bits used to specify default attributes for a new node...
#define UA_TYPES_VARIABLEATTRIBUTES
UA_BrowsePath * browsePaths
#define UA_NS0ID_DELETEMONITOREDITEMSREQUEST_ENCODING_DEFAULTBINARY
UA_Boolean releaseContinuationPoints
#define UA_TYPES_CALLMETHODREQUEST
#define UA_NODEIDTYPE_NUMERIC_FOURBYTE
#define UA_STATUSCODE_BADOUTOFMEMORY
UA_LocalizedText inverseName
UA_Double revisedSamplingInterval
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYACKED
#define UA_NodeStore_newObjectNode()
#define UA_TYPES_CHANNELSECURITYTOKEN
UA_MethodCallback attachedMethod
#define UA_TYPES_BOOLEAN
Boolean ^^^^^^^.
#define UA_STATUSCODE_BADSESSIONNOTACTIVATED
#define UA_STATUSCODE_GOODCOMPLETESASYNCHRONOUSLY
#define SIMPLEQ_REMOVE_HEAD(head, field)
size_t arrayDimensionsSize
#define UA_NS0ID_SERVER_SERVERARRAY
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADMAXCONNECTIONSREACHED
UA_MonitoredItem * UA_Subscription_getMonitoredItem(UA_Subscription *sub, UA_UInt32 monitoredItemID)
#define UA_TYPES_BROWSEDESCRIPTION
#define UA_TYPES_CONTENTFILTERELEMENTRESULT
#define UA_STATUSCODE_BADBOUNDNOTSUPPORTED
#define UA_TYPES_REFERENCENODE
#define UA_NODEIDTYPE_NUMERIC_COMPLETE
#define UA_STATUSCODE_BADCERTIFICATEISSUERREVOCATIONUNKNOWN
void UA_Subscription_deleteMembers(UA_Subscription *subscription, UA_Server *server)
#define UA_STATUSCODE_BADSERVICEUNSUPPORTED
UA_UInt32 maxNotificationsPerPublish
Guid ^^^^ A 16 byte value that can be used as a globally unique identifier.
UA_MessageSecurityMode
MessageSecurityMode ^^^^^^^^^^^^^^^^^^^ The type of security to use on a message. ...
UA_StatusCode UA_Node_copyAnyNodeClass(const UA_Node *src, UA_Node *dst)
String ^^^^^^ A sequence of Unicode characters.
#define UA_STATUSCODE_BADRESOURCEUNAVAILABLE
const UA_Node * UA_NodeStore_get(UA_NodeStore *ns, const UA_NodeId *nodeid)
MonitoringParameters ^^^^^^^^^^^^^^^^^^^^.
#define SIMPLEQ_HEAD(name, type)
UA_DeadbandType
DeadbandType ^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
#define UA_TYPES_MONITOREDITEMMODIFYRESULT
UA_UInt32 monitoredItemId
#define UA_assert(ignore)
#define UA_NS0ID_DELETESUBSCRIPTIONSREQUEST_ENCODING_DEFAULTBINARY
#define SIMPLEQ_INIT(head)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEFOOTER
void UA_Connection_attachSecureChannel(UA_Connection *connection, UA_SecureChannel *channel)
size_t inputArgumentsSize
UA_StatusCode UA_Server_setObjectTypeNode_lifecycleManagement(UA_Server *server, UA_NodeId nodeId, UA_ObjectLifecycleManagement olm)
UA_NodeId authenticationToken
#define UA_TYPES_VIEWATTRIBUTES
#define UA_STATUSCODE_BADTOOMANYPUBLISHREQUESTS
UA_RequestHeader requestHeader
size_t(* stop)(UA_ServerNetworkLayer *nl, UA_Job **jobs)
UA_UInt32 receiveSequenceNumber
#define UA_STATUSCODE_BADNODELETERIGHTS
#define UA_STATUSCODE_BADPARENTNODEIDINVALID
DeleteMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADEVENTNOTACKNOWLEDGEABLE
UA_StatusCode UA_Connection_completeMessages(UA_Connection *connection, UA_ByteString *message, UA_Boolean *realloced)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_AGGREGATEFUNCTIONS
#define UA_STATUSCODE_BADNONCEINVALID
UA_Boolean UA_NodeId_isNull(const UA_NodeId *p)
void UA_Node_deleteMembersAnyNodeClass(UA_Node *node)
#define UA_TYPES_LOCALIZEDTEXT
LocalizedText ^^^^^^^^^^^^^.
AddReferencesResponse ^^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
const UA_EXPORT UA_ServerConfig UA_ServerConfig_standard
UA_StatusCode(* UA_NodeIteratorCallback)(UA_NodeId childId, UA_Boolean isInverse, UA_NodeId referenceTypeId, void *handle)
UA_Boolean userExecutable
UA_Double requestedPublishingInterval
#define UA_TYPES_TRANSLATEBROWSEPATHSTONODEIDSREQUEST
UA_ConnectionConfig remoteConf
UA_BrowseResult UA_Server_browseNext(UA_Server *server, UA_Boolean releaseContinuationPoint, const UA_ByteString *continuationPoint)
const UA_Node * getNodeType(UA_Server *server, const UA_Node *node)
#define UA_TYPES_RESPONSEHEADER
UA_StatusCode UA_Server_run_shutdown(UA_Server *server)
#define UA_STATUSCODE_BADIDENTITYTOKENREJECTED
#define UA_NODE_VARIABLEATTRIBUTES
#define UA_STATUSCODE_BADSESSIONCLOSED
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_GOOD
#define UA_STATUSCODE_BADNOTTYPEDEFINITION
#define UA_STATUSCODE_BADNOTHINGTODO
#define UA_NS0ID_REGISTERNODESREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_GOODCLAMPED
size_t referencesToAddSize
UA_EXPORT const UA_DataType UA_TRANSPORT[UA_TRANSPORT_COUNT]
struct UA_SecureChannelManager UA_SecureChannelManager
UA_ExpandedNodeId requestedNewNodeId
#define UA_STATUSCODE_BADNOTREADABLE
UA_StatusCode UA_Variant_setScalarCopy(UA_Variant *v, const void *p, const UA_DataType *type)
void UA_SecureChannel_detachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_TYPES_UNREGISTERNODESRESPONSE
void Service_ModifySubscription(UA_Server *server, UA_Session *session, const UA_ModifySubscriptionRequest *request, UA_ModifySubscriptionResponse *response)
UA_UInt32 requestedLifetimeCount
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MAXHISTORYCONTINUATIONPOINTS
UA_StatusCode typeCheckValue(UA_Server *server, const UA_NodeId *targetDataTypeId, UA_Int32 targetValueRank, size_t targetArrayDimensionsSize, const UA_UInt32 *targetArrayDimensions, const UA_Variant *value, const UA_NumericRange *range, UA_Variant *editableValue)
#define UA_NS0ID_ROOTFOLDER
UA_ResponseHeader responseHeader
UA_StatusCode UA_Client_getEndpoints(UA_Client *client, const char *serverUrl, size_t *endpointDescriptionsSize, UA_EndpointDescription **endpointDescriptions)
int8_t UA_SByte
SByte ^^^^^ An integer value between -128 and 127.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_LOCALEIDARRAY
UA_Boolean UA_NodeId_equal(const UA_NodeId *n1, const UA_NodeId *n2)
#define UA_TYPES_FILTEROPERATOR
#define UA_TYPES_CLOSESECURECHANNELREQUEST
#define UA_NS0ID_SETMONITORINGMODEREQUEST_ENCODING_DEFAULTBINARY
CloseSessionRequest ^^^^^^^^^^^^^^^^^^^ Closes a session with the server.
#define UA_STATUSCODE_BADCERTIFICATETIMEINVALID
ReadResponse ^^^^^^^^^^^^.
#define UA_STATUSCODE_GOODSUBSCRIPTIONTRANSFERRED
UA_BrowseDirection
BrowseDirection ^^^^^^^^^^^^^^^ The directions of the references to return.
#define UA_NS0ID_DATETIME
WriteRequest ^^^^^^^^^^^^.
const UA_StatusCodeDescription * UA_StatusCode_description(UA_StatusCode code)
UA_StatusCode MonitoredItem_unregisterSampleJob(UA_Server *server, UA_MonitoredItem *mon)
#define UA_TYPES_VIEWDESCRIPTION
void UA_NodeStore_delete(UA_NodeStore *ns)
#define UA_TYPES_QUERYFIRSTREQUEST
#define UA_NS0ID_SERVER_SERVERSTATUS
#define UA_NS0ID_STRUCTURE
UA_StatusCode parse_numericrange(const UA_String *str, UA_NumericRange *range)
#define UA_STATUSCODE_BADUSERACCESSDENIED
#define UA_STATUSCODE_UNCERTAINNOTALLNODESAVAILABLE
#define UA_NS0ID_SETPUBLISHINGMODEREQUEST_ENCODING_DEFAULTBINARY
UA_StatusCode writeValueRankAttribute(UA_Server *server, UA_VariableNode *node, UA_Int32 valueRank, UA_Int32 constraintValueRank)
void Service_AddNodes(UA_Server *server, UA_Session *session, const UA_AddNodesRequest *request, UA_AddNodesResponse *response)
NodeManagement Service Set This Service Set defines Services to add and delete AddressSpace Nodes and...
UA_StatusCode __UA_Client_addNode(UA_Client *client, const UA_NodeClass nodeClass, const UA_NodeId requestedNewNodeId, const UA_NodeId parentNodeId, const UA_NodeId referenceTypeId, const UA_QualifiedName browseName, const UA_NodeId typeDefinition, const UA_NodeAttributes *attr, const UA_DataType *attributeType, UA_NodeId *outNewNodeId)
#define UA_STATUSCODE_BADDATAENCODINGUNSUPPORTED
ActivateSessionRequest ^^^^^^^^^^^^^^^^^^^^^^ Activates a session with the server.
#define UA_STATUSCODE_BADCONNECTIONCLOSED
UA_SecureChannel * channel
UA_StatusCode UA_SecureChannel_sendBinaryMessage(UA_SecureChannel *channel, UA_UInt32 requestId, const void *content, const UA_DataType *contentType)
#define UA_STATUSCODE_GOODENTRYINSERTED
#define UA_STATUSCODE_BADCOMMUNICATIONERROR
#define UA_TYPES_STATUSCODE
StatusCode ^^^^^^^^^^.
void UA_SessionManager_deleteMembers(UA_SessionManager *sm)
size_t(* UA_calcSizeBinarySignature)(const void *UA_RESTRICT p, const UA_DataType *contenttype)
#define UA_TYPES_BROWSEDIRECTION
CloseSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_STATUSCODE_BADREQUESTHEADERINVALID
#define UA_TYPES_REGISTERNODESREQUEST
#define UA_TYPES_EXTENSIONOBJECT
ExtensionObject ^^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES
#define UA_TYPES_UNREGISTERNODESREQUEST
#define PCG32_INITIALIZER
UA_SessionManager sessionManager
UA_ResponseHeader responseHeader
UA_UInt32 requestedMaxKeepAliveCount
SetMonitoringModeResponse ^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_UInt32 revisedQueueSize
#define UA_TYPES_BROWSERESULT
ServerStatusDataType ^^^^^^^^^^^^^^^^^^^^.
UA_ByteString serverNonce
void(* releaseSendBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_Connection * closeConnection
#define LIST_FOREACH_SAFE(var, head, field, tvar)
void Service_DeleteReferences(UA_Server *server, UA_Session *session, const UA_DeleteReferencesRequest *request, UA_DeleteReferencesResponse *response)
UA_UInt32 UA_NodeId_hash(const UA_NodeId *n)
void Service_GetEndpoints(UA_Server *server, UA_Session *session, const UA_GetEndpointsRequest *request, UA_GetEndpointsResponse *response)
UA_NodeId referenceTypeId
UA_StatusCode UA_Variant_setRange(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_NumericRange range)
#define UA_STATUSCODE_BADSECURITYMODEINSUFFICIENT
UA_Double revisedSamplingInterval
BrowsePath ^^^^^^^^^^ A request to translate a path into a node id.
#define UA_TYPES_QUERYNEXTRESPONSE
DeleteSubscriptionsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
RelativePathElement ^^^^^^^^^^^^^^^^^^^ An element in a relative path.
#define UA_STATUSCODE_BADSECURITYCHECKSFAILED
UA_LocalizedText displayName
UA_NotificationMessage notificationMessage
UA_FilterOperator
FilterOperator ^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONNOTSHELVED
#define UA_TYPES_MONITOREDITEMCREATERESULT
#define UA_calloc(num, size)
uint8_t UA_Byte
Byte ^^^^ An integer value between 0 and 255.
BrowseResult ^^^^^^^^^^^^ The result of a browse operation.
UA_DateTimeStruct UA_DateTime_toStruct(UA_DateTime t)
void UA_Session_init(UA_Session *session)
#define UA_STATUSCODE_BADMETHODINVALID
#define UA_STATUSCODE_BADSENSORFAILURE
#define UA_STATUSCODE_BADCERTIFICATEREVOCATIONUNKNOWN
void UA_SecureChannel_deleteMembersCleanup(UA_SecureChannel *channel)
#define UA_STATUSCODE_BADFILTEROPERANDCOUNTMISMATCH
#define UA_NS0ID_HASNOTIFIER
#define UA_TYPES_DELETEREFERENCESREQUEST
UA_QualifiedName dataEncoding
UA_UInt32 * subscriptionIds
#define UA_STATUSCODE_BADAGGREGATENOTSUPPORTED
VariableTypeAttributes ^^^^^^^^^^^^^^^^^^^^^^ The attributes for a variable type node.
UA_Boolean hasInnerStatusCode
#define UA_TYPES_NOTIFICATIONMESSAGE
#define UA_TYPES_TIMESTAMPSTORETURN
UA_ReferenceDescription * references
#define UA_STATUSCODE_BADNOSUBSCRIPTION
UA_StatusCode(* getSendBuffer)(UA_Connection *connection, size_t length, UA_ByteString *buf)
CloseSecureChannelResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^ Closes a secure channel.
#define UA_TYPES_SECURITYTOKENREQUESTTYPE
UA_AddNodesResult * results
#define UA_STATUSCODE_BADUNEXPECTEDERROR
#define UA_TYPES_DELETESUBSCRIPTIONSREQUEST
#define UA_STATUSCODE_BADWRITENOTSUPPORTED
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SOFTWARECERTIFICATES
UA_Boolean hasAdditionalInfo
UA_ByteString clientNonce
#define UA_EXPANDEDNODEID_NAMESPACEURI_FLAG
#define UA_NS0ID_BUILDINFOTYPE
UA_ResponseHeader responseHeader
#define UA_STATUSCODE_BADWAITINGFORRESPONSE
UA_NODE_BASEATTRIBUTES UA_Byte eventNotifier
#define UA_TYPES_ANONYMOUSIDENTITYTOKEN
void UA_delete(void *p, const UA_DataType *type)
UA_ServerState
ServerState ^^^^^^^^^^^.
UA_UInt32 * availableSequenceNumbers
#define UA_STATUSCODE_BADUNKNOWNRESPONSE
void UA_Subscription_answerPublishRequestsNoSubscription(UA_Server *server, UA_NodeId *sessionToken)
GetEndpointsRequest ^^^^^^^^^^^^^^^^^^^ Gets the endpoints used by the server.
void Service_AddReferences(UA_Server *server, UA_Session *session, const UA_AddReferencesRequest *request, UA_AddReferencesResponse *response)
#define UA_NS0ID_HASHISTORICALCONFIGURATION
UA_StatusCode(* UA_copySignature)(const void *src, void *dst, const UA_DataType *type)
void pcg32_srandom_r(pcg32_random_t *rng, uint64_t initial_state, uint64_t initseq)
UA_ExpandedNodeId targetNodeId
UA_Boolean hasServerPicoseconds
#define UA_TYPES_RELATIVEPATHELEMENT
UA_ExtensionObject * notificationData
AddNodesResult ^^^^^^^^^^^^^^ A result of an add node operation.
#define UA_TYPES_DOUBLE
Double ^^^^^^.
#define LIST_INSERT_AFTER(listelm, elm, field)
void(* releaseRecvBuffer)(UA_Connection *connection, UA_ByteString *buf)
UA_String securityPolicyUri
UA_ServerNetworkLayer UA_ServerNetworkLayerTCP(UA_ConnectionConfig conf, UA_UInt16 port)
#define UA_STATUSCODE_BADCONTENTFILTERINVALID
CreateSessionResponse ^^^^^^^^^^^^^^^^^^^^^ Creates a new session with the server.
const UA_ByteString UA_BYTESTRING_NULL
#define UA_STATUSCODE_BADFILTEROPERATORUNSUPPORTED
#define UA_TYPES_BROWSENEXTRESPONSE
UA_NodeClass
NodeClass ^^^^^^^^^ A mask specifying the class of the node.
UA_StatusCode UA_SecureChannelManager_renew(UA_SecureChannelManager *cm, UA_Connection *conn, const UA_OpenSecureChannelRequest *request, UA_OpenSecureChannelResponse *response)
UA_UInt32 remainingPathIndex
UA_StatusCode UA_Variant_copyRange(const UA_Variant *src, UA_Variant *dst, const UA_NumericRange range)
#define UA_TYPES_INT64
Int64 ^^^^^.
#define UA_NS0ID_AGGREGATES
#define UA_STATUSCODE_BADSOURCENODEIDINVALID
UA_TimestampsToReturn
TimestampsToReturn ^^^^^^^^^^^^^^^^^^.
#define UA_NS0ID_EVENTTYPESFOLDER
UA_StatusCode UA_Server_addRepeatedJob(UA_Server *server, UA_Job job, UA_UInt32 interval, UA_Guid *jobId)
Repeated jobs
RegisterNodesRequest ^^^^^^^^^^^^^^^^^^^^ Registers one or more nodes for repeated use within a sessi...
size_t nodesToUnregisterSize
EndpointDescription ^^^^^^^^^^^^^^^^^^^ The description of a endpoint that can be used to access a se...
#define UA_BINARY_OVERLAYABLE_FLOAT
Float Endianness ^^^^^^^^^^^^^^^^ The definition UA_BINARY_OVERLAYABLE_FLOAT is true when the floatin...
UA_LocalizedText description
ObjectAttributes ^^^^^^^^^^^^^^^^ The attributes for an object node.
#define UA_NS0ID_SERVER_SERVICELEVEL
#define UA_TYPES_QUERYNEXTREQUEST
#define UA_STATUSCODE_BADTCPSERVERTOOBUSY
#define UA_TYPES_ACTIVATESESSIONRESPONSE
#define UA_TYPES_REQUESTHEADER
UA_DataTypeMember * members
UA_ResponseHeader responseHeader
#define UA_TYPES_UINT16
UInt16 ^^^^^^.
UA_SecureChannel * channel
UA_StatusCode UA_encodeBinary(const void *src, const UA_DataType *type, UA_exchangeEncodeBuffer exchangeCallback, void *exchangeHandle, UA_ByteString *dst, size_t *offset) UA_FUNC_ATTR_WARN_UNUSED_RESULT
#define UA_TYPES_VARIANT
Variant ^^^^^^^.
void UA_SecureChannelManager_cleanupTimedOut(UA_SecureChannelManager *cm, UA_DateTime nowMonotonic)
UA_UInt32 receiveBufferSize
UA_TimestampsToReturn timestampsToReturn
DeleteReferencesResponse ^^^^^^^^^^^^^^^^^^^^^^^^ Delete one or more references from the server addre...
#define UA_TYPES_NODECLASS
#define UA_STATUSCODE_GOODOVERLOAD
void(* close)(UA_Connection *connection)
UA_NODE_BASEATTRIBUTES UA_Boolean executable
void UA_Variant_setArray(UA_Variant *v, void *UA_RESTRICT array, size_t arraySize, const UA_DataType *type)
#define UA_STATUSCODE_BADVIEWTIMESTAMPINVALID
void Service_CreateSession(UA_Server *server, UA_SecureChannel *channel, const UA_CreateSessionRequest *request, UA_CreateSessionResponse *response)
Session Service Set This Service Set defines Services for an application layer connection establishme...
#define UA_NS0ID_SERVER_SERVERCAPABILITIES_SERVERPROFILEARRAY
size_t availableSequenceNumbersSize
#define UA_STATUSCODE_BADIDENTITYTOKENINVALID
#define UA_fd_set(fd, fds)
#define UA_NS0ID_SERVER_SERVERCAPABILITIES
struct UA_NotificationMessageEntry UA_NotificationMessageEntry
#define UA_STATUSCODE_BADBROWSEDIRECTIONINVALID
#define UA_STRING_STATIC(s)
#define TAILQ_FOREACH_SAFE(var, head, field, tvar)
#define UA_STATUSCODE_GOODLOCALOVERRIDE
#define SLIST_HEAD(name, type)
#define UA_TYPES_SERVERSTATE
#define LIST_INSERT_HEAD(head, elm, field)
#define UA_TRANSPORT_SECURECONVERSATIONMESSAGEABORTBODY
MonitoredItemCreateRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
void(* UA_Logger)(UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args)
The signature of the logger.
ModifyMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
UA_SecurityTokenRequestType
SecurityTokenRequestType ^^^^^^^^^^^^^^^^^^^^^^^^ Indicates whether a token if being created or renew...
#define UA_NS0ID_HASEVENTSOURCE
UA_UInt32 * monitoredItemIds
#define UA_NS0ID_SERVER_SERVERDIAGNOSTICS
#define UA_STATUSCODE_BADSECURITYPOLICYREJECTED
UA_STATIC_ASSERT(sizeof(UA_MessageType)==sizeof(UA_Int32), enum_must_be_32bit)
#define UA_NS0ID_CLOSESESSIONREQUEST_ENCODING_DEFAULTBINARY
#define UA_STATUSCODE_BADINVALIDSTATE
#define UA_STATUSCODE_BADCONDITIONALREADYENABLED
#define UA_NS0ID_DIAGNOSTICINFO
#define UA_NS0ID_SERVER_GETMONITOREDITEMS
#define UA_STATUSCODE_BADFILTERLITERALINVALID
#define UA_STATUSCODE_BADARGUMENTSMISSING
#define UA_STATUSCODE_UNCERTAINSUBSTITUTEVALUE
#define UA_STATUSCODE_BADNODATAAVAILABLE
#define UA_STATUSCODE_UNCERTAINDEPENDENTVALUECHANGED
UA_StatusCode Service_AddNodes_existing(UA_Server *server, UA_Session *session, UA_Node *node, const UA_NodeId *parentNodeId, const UA_NodeId *referenceTypeId, const UA_NodeId *typeDefinition, UA_InstantiationCallback *instantiationCallback, UA_NodeId *addedNodeId)
UA_NodeId referenceTypeId
UA_UInt32 * arrayDimensions
#define UA_TYPES_OBJECTTYPEATTRIBUTES
UA_StatusCode UA_Array_copy(const void *src, size_t size, void **dst, const UA_DataType *type)
#define UA_STATUSCODE_BADATTRIBUTEIDINVALID
UA_Double samplingInterval
UA_MonitoringMode monitoringMode
#define UA_TYPES_CREATESESSIONREQUEST
ContentFilterElementResult ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_BROWSEPATHTARGET
#define UA_TYPES_NODETYPEDESCRIPTION
#define UA_DATETIME_UNIX_EPOCH
#define UA_STATUSCODE_BADINVALIDTIMESTAMP
#define LIST_FOREACH(var, head, field)
void Service_Write(UA_Server *server, UA_Session *session, const UA_WriteRequest *request, UA_WriteResponse *response)
#define UA_TYPES_OBJECTATTRIBUTES
BrowseDescription ^^^^^^^^^^^^^^^^^ A request to browse the the references from a node...
#define UA_NS0ID_BASEVARIABLETYPE
#define UA_NodeStore_newMethodNode()
#define UA_STATUSCODE_BADCERTIFICATEURIINVALID
#define UA_NS0ID_MODELLINGRULETYPE
#define UA_STATUSCODE_BADTCPSECURECHANNELUNKNOWN
#define UA_NS0ID_SERVERSTATUSTYPE
UA_StatusCode UA_Client_deleteNode(UA_Client *client, const UA_NodeId nodeId, UA_Boolean deleteTargetReferences)
#define UA_NS0ID_READREQUEST_ENCODING_DEFAULTBINARY
#define UA_NS0ID_EXPANDEDNODEID
struct session_list_entry session_list_entry
#define UA_RESTRICT
Non-aliasing pointers
#define UA_STATUSCODE_BADFILTEROPERATORINVALID
#define UA_TYPES_QUERYDATADESCRIPTION
void Service_ModifyMonitoredItems(UA_Server *server, UA_Session *session, const UA_ModifyMonitoredItemsRequest *request, UA_ModifyMonitoredItemsResponse *response)
int __secs_to_tm(long long t, struct tm *tm)
UA_StatusCode UA_Client_deleteReference(UA_Client *client, const UA_NodeId sourceNodeId, const UA_NodeId referenceTypeId, UA_Boolean isForward, const UA_ExpandedNodeId targetNodeId, UA_Boolean deleteBidirectional)
size_t referencesToDeleteSize
#define UA_STATUSCODE_BADCONFIGURATIONERROR
#define UA_STATUSCODE_BADTOOMANYMONITOREDITEMS
UA_UInt32 revisedMaxKeepAliveCount
status(* UA_encodeBinarySignature)(const void *UA_RESTRICT src, const UA_DataType *type)
void Service_RegisterNodes(UA_Server *server, UA_Session *session, const UA_RegisterNodesRequest *request, UA_RegisterNodesResponse *response)
UA_UInt16 binaryEncodingId
size_t arrayDimensionsSize
UA_Boolean userExecutable
UA_SubscriptionAcknowledgement * subscriptionAcknowledgements
void Service_Republish(UA_Server *server, UA_Session *session, const UA_RepublishRequest *request, UA_RepublishResponse *response)
UA_String targetServerUri
UA_UInt32 requestedLifetime
UA_BrowseResult * results
#define UA_NS0ID_MODELLINGRULE_OPTIONAL
UA_TimestampsToReturn timestampsToReturn
#define UA_NS0ID_HASCHILD
union UA_NodeId::@0 identifier
UA_ByteString clientNonce
#define UA_NS0ID_OBJECTTYPESFOLDER
#define UA_TYPES_DATETIME
DateTime ^^^^^^^^.
UA_ReadValueId itemToMonitor
UA_ResponseHeader responseHeader
UA_Client * UA_Client_new(UA_ClientConfig config)
#define UA_STATUSCODE_BADDATATYPEIDUNKNOWN
UA_UsernamePasswordLogin usernamePasswords[2]
#define UA_NS0ID_REPUBLISHREQUEST_ENCODING_DEFAULTBINARY
#define UA_TYPES_SETPUBLISHINGMODERESPONSE
#define UA_TYPES_MONITORINGMODE
#define UA_TYPES_REFERENCEDESCRIPTION
#define UA_TYPES_ADDREFERENCESREQUEST
UA_DataChangeTrigger
DataChangeTrigger ^^^^^^^^^^^^^^^^^.
#define UA_TYPES_VARIABLETYPEATTRIBUTES
size_t serverEndpointsSize
QueryFirstResponse ^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_APPLICATIONDESCRIPTION
size_t monitoredItemIdsSize
UA_ReadValueId * nodesToRead
UA_MonitoringMode monitoringMode
struct UA_SessionManager UA_SessionManager
UA_ExpandedNodeId targetId
RepublishRequest ^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADTCPNOTENOUGHRESOURCES
#define UA_TYPES_USERTOKENPOLICY
UA_NotificationMessage notificationMessage
#define UA_STATUSCODE_UNCERTAINENGINEERINGUNITSEXCEEDED
#define UA_STATUSCODE_BADFILTERNOTALLOWED
UA_RequestHeader requestHeader
DataChangeNotification ^^^^^^^^^^^^^^^^^^^^^^.
const char * LogCategoryNames[6]
UA_UInt32 sendSequenceNumber
const UA_DataType UA_TYPES[UA_TYPES_COUNT]
#define UA_TYPES_XMLELEMENT
XmlElement ^^^^^^^^^^.
UA_NodeId * nodesToRegister
#define UA_STRING_ALLOC(CHARS)
#define UA_TYPES_DIAGNOSTICINFO
DiagnosticInfo ^^^^^^^^^^^^^^.
#define UA_TYPES_CREATEMONITOREDITEMSREQUEST
#define UA_TYPES_DELETEMONITOREDITEMSRESPONSE
#define UA_STATUSCODE_BADWAITINGFORINITIALDATA
void Service_Browse_single(UA_Server *server, UA_Session *session, struct ContinuationPointEntry *cp, const UA_BrowseDescription *descr, UA_UInt32 maxrefs, UA_BrowseResult *result)
size_t monitoredItemsSize
UA_UInt32 monitoredItemId
#define UA_EMPTY_ARRAY_SENTINEL
PublishResponse ^^^^^^^^^^^^^^^.
UA_RelativePath relativePath
UA_StatusCode __UA_Client_readAttribute(UA_Client *client, const UA_NodeId *nodeId, UA_AttributeId attributeId, void *out, const UA_DataType *outDataType)
#define UA_TYPES_CREATEMONITOREDITEMSRESPONSE
UA_NodeId * registeredNodeIds
UA_UserTokenType
UserTokenType ^^^^^^^^^^^^^ The possible user token types.
UA_StatusCode UA_copy(const void *src, void *dst, const UA_DataType *type)
UA_LocalizedText displayName
UA_StatusCode UA_Server_delayedCallback(UA_Server *server, UA_ServerCallback callback, void *data)
#define UA_malloc(_p_size)
UA_Variant * outputArguments
void UA_deleteMembers(void *p, const UA_DataType *type)
#define UA_STATUSCODE_BADTYPEDEFINITIONINVALID
UA_UserTokenPolicy * userIdentityTokens
#define UA_STATUSCODE_BADNODATA
BrowseRequest ^^^^^^^^^^^^^ Browse the references for one or more nodes from the server address space...
UA_StatusCode UA_Connection_receiveChunksBlocking(UA_Connection *connection, UA_ByteString *chunks, UA_Boolean *realloced, UA_UInt32 timeout)
#define UA_STATUSCODE_UNCERTAINNOCOMMUNICATIONLASTUSABLEVALUE
UA_StatusCode UA_Server_write(UA_Server *server, const UA_WriteValue *value)
The following node attributes cannot be changed once a node has been created:
#define UA_STATUSCODE_BADFILTEROPERANDINVALID
size_t monitoredItemIdsSize
#define UA_TRANSPORT_TCPMESSAGEHEADER
#define UA_MAXCONTINUATIONPOINTS
NodeTypeDescription ^^^^^^^^^^^^^^^^^^^.
struct UA_DiagnosticInfo UA_DiagnosticInfo
DiagnosticInfo ^^^^^^^^^^^^^^ A structure that contains detailed error and diagnostic information ass...
#define UA_TYPES_REGISTERNODESRESPONSE
#define UA_TYPES_DELETENODESREQUEST
#define UA_FUNC_ATTR_WARN_UNUSED_RESULT
UA_UInt32 revisedQueueSize
UA_Double requestedSessionTimeout
UA_ResponseHeader responseHeader
#define UA_TYPES_CALLRESPONSE
#define UA_STATUSCODE_BADHISTORYOPERATIONUNSUPPORTED
#define UA_STATUSCODE_BADAPPLICATIONSIGNATUREINVALID
#define TAILQ_INSERT_TAIL(head, elm, field)
BrowsePathResult ^^^^^^^^^^^^^^^^ The result of a translate opearation.
#define UA_BUILTIN_TYPES_COUNT
#define UA_STATUSCODE_BADREQUESTTOOLARGE
struct pcg_state_setseq_64 pcg32_random_t
#define UA_TYPES_ENDPOINTDESCRIPTION
OpenSecureChannelRequest ^^^^^^^^^^^^^^^^^^^^^^^^ Creates a secure channel with a server...
#define UA_OPEN62541_VER_PATCH
#define UA_TYPES_NODEATTRIBUTESMASK
#define UA_NS0ID_FOLDERTYPE
#define UA_STATUSCODE_BADNOTWRITABLE
UA_NODE_BASEATTRIBUTES UA_Boolean isAbstract
UA_Double minimumSamplingInterval
UA_BrowseResult * results
AddReferencesRequest ^^^^^^^^^^^^^^^^^^^^ Adds one or more references to the server address space...
#define UA_TYPES_QUERYFIRSTRESPONSE
#define UA_STATUSCODE_BADREQUESTNOTALLOWED
#define UA_STATUSCODE_BADDECODINGERROR
#define UA_MSEC_TO_DATETIME
void UA_SecureChannel_attachSession(UA_SecureChannel *channel, UA_Session *session)
#define UA_STATUSCODE_BADMAXAGEINVALID
UA_RequestHeader requestHeader
#define UA_TYPES_CONTENTFILTERELEMENT
#define TAILQ_HEAD(name, type)
#define UA_STATUSCODE_BADNOENTRYEXISTS
UA_MessageType
MessageType ^^^^^^^^^^^ Message Type and whether the message contains an intermediate chunk...
#define UA_STATUSCODE_BADCERTIFICATEUSENOTALLOWED
UA_Boolean moreNotifications
#define UA_STATUSCODE_BADMONITORINGMODEINVALID
#define UA_TYPES_SETMONITORINGMODEREQUEST
#define UA_TYPES_NODEID
NodeId ^^^^^^.
UA_StatusCode UA_ByteString_allocBuffer(UA_ByteString *bs, size_t length)
size_t endpointDescriptionsSize
ModifySubscriptionResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^.
UnregisterNodesResponse ^^^^^^^^^^^^^^^^^^^^^^^ Unregisters one or more previously registered nodes...
struct UA_Job::@5::@7 methodCall
PublishRequest ^^^^^^^^^^^^^^.
#define UA_NS0ID_SERVER_NAMESPACEARRAY
#define UA_NS0ID_SERVER_GETMONITOREDITEMS_INPUTARGUMENTS
UA_AsymmetricAlgorithmSecurityHeader serverAsymAlgSettings
MonitoredItemModifyRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADDOMINANTVALUECHANGED
#define SIMPLEQ_INSERT_TAIL(head, elm, field)
#define UA_STATUSCODE_BADEVENTIDUNKNOWN
int64_t UA_Int64
Int64 ^^^^^ An integer value between -9 223 372 036 854 775 808 and 9 223 372 036 854 775 807...
#define UA_TYPES_CREATESUBSCRIPTIONRESPONSE
#define UA_STATUSCODE_BADNODEIDREJECTED
#define UA_TYPES_EXPANDEDNODEID
ExpandedNodeId ^^^^^^^^^^^^^^.
UA_ResponseHeader responseHeader
CreateMonitoredItemsResponse ^^^^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_TYPES_CONTENTFILTERRESULT
#define UA_TYPES_DATATYPEATTRIBUTES
void Service_BrowseNext(UA_Server *server, UA_Session *session, const UA_BrowseNextRequest *request, UA_BrowseNextResponse *response)
UA_NodeId referenceTypeId
#define LIST_REMOVE(elm, field)
#define UA_TYPES_BROWSERESULTMASK
#define UA_STATUSCODE_BADAGGREGATEINVALIDINPUTS
#define UA_TRANSPORT_TCPERRORMESSAGE
void Service_SetPublishingMode(UA_Server *server, UA_Session *session, const UA_SetPublishingModeRequest *request, UA_SetPublishingModeResponse *response)
#define UA_TYPES_ADDNODESRESULT
#define UA_PRINTF_STRING_FORMAT
MonitoredItemNotification ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADNODEIDINVALID
BrowsePathTarget ^^^^^^^^^^^^^^^^ The target of the translated path.
const UA_VariableTypeNode * getVariableNodeType(UA_Server *server, const UA_VariableNode *node)
#define UA_NS0ID_SERVERSTATE
ModifySubscriptionRequest ^^^^^^^^^^^^^^^^^^^^^^^^^.
#define UA_STATUSCODE_BADCONDITIONBRANCHALREADYCONFIRMED
ModifyMonitoredItemsRequest ^^^^^^^^^^^^^^^^^^^^^^^^^^^.
void UA_Connection_detachSecureChannel(UA_Connection *connection)
#define UA_STATUSCODE_BADSHUTDOWN
#define CHECK_ATTRIBUTES(TYPE)
UA_LocalizedText description
AnonymousIdentityToken ^^^^^^^^^^^^^^^^^^^^^^ A token representing an anonymous user.
#define UA_TYPES_OPENSECURECHANNELRESPONSE
UA_StatusCode(* UA_EditNodeCallback)(UA_Server *, UA_Session *, UA_Node *, const void *)
UA_StatusCode UA_SessionManager_init(UA_SessionManager *sm, UA_Server *server)
#define UA_STATUSCODE_BADCONDITIONALREADYSHELVED
#define UA_NODE_BASEATTRIBUTES
#define UA_NS0ID_CALLREQUEST_ENCODING_DEFAULTBINARY
#define UA_TRANSPORT_COUNT
Every type is assigned an index in an array containing the type descriptions.
LocalizedText ^^^^^^^^^^^^^ Human readable text with an optional locale identifier.
UA_Boolean hasSourceTimestamp
UA_UInt32 revisedLifetimeCount
#define UA_STATUSCODE_BADTCPMESSAGETYPEINVALID
#define UA_TYPES_BUILDINFO
#define UA_TYPES_GETENDPOINTSRESPONSE
UA_ChannelSecurityToken nextSecurityToken
#define UA_STATUSCODE_UNCERTAINLASTUSABLEVALUE
void UA_MoniteredItem_SampleCallback(UA_Server *server, UA_MonitoredItem *monitoredItem)
UA_RequestHeader requestHeader
ContentFilterElement ^^^^^^^^^^^^^^^^^^^^.
#define UA_TRANSPORT_SEQUENCEHEADER
#define UA_STATUSCODE_BADCERTIFICATEISSUERUSENOTALLOWED
#define UA_STATUSCODE_BADENDOFSTREAM
UA_StatusCode UA_Server_removeRepeatedJob(UA_Server *server, UA_Guid jobId)
#define UA_TYPES_QUALIFIEDNAME
QualifiedName ^^^^^^^^^^^^^.
UA_LocalizedText displayName
#define UA_NS0ID_BROWSEREQUEST_ENCODING_DEFAULTBINARY